전체 글 146

열거형(Enums)

열거형 : 서로 관련된 상수를 편리하게 선언하기 위한 것 열거형이란 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할때 사용하면 유용하다. jdk 1.5부터 추가되었다. class Card{ static final int CLOVER= 0; static final int HEART= 1; static final int DIAMOND= 2; static final int SPADE= 3; static final int TWO=0; static final int THREE =1; static final int FOUR = 2; final int kind; final int num; } class Card{ enum Kind { CLOVER, HEAR, DIAMOND, SPACE } //열..

JVM의 메모리구조

JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당박도 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다. JVM은 3가지 주요 영역으로 나뉜다. 1. Method Area 2. Call Stack 3. heap 1. 메서드 영역 (method area) - 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일 (*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스데이터)를 이곳에 저장한다. 이 때, 그 클래스의 클래수변수도 이 영역에 함께 생성된다. 2. 힙 (Heap) - 인스턴스가 생성되는 공간. 프로그램 실행 중 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스 변수들이 생성되는 공간이다. 3. 호출스택(call stack 또는 execut..

[프로그래머스] 카펫 (level.2) / JAVA /완전탐색

https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr 브라운과 옐로우 / 가로와 세로의 관계만 알아내면 금방 풀 수 있다. 1) 브라운 = (가로-2) *2 + 세로*2 옐로우 = (가로-2) * (세로-2)*2 이 때, 가로>= 세로 라는 조건이 있음. 따라서 세로는 3부터 브라운/2 까지만 가능하다고 설정하였다 ex) 브라운이 10 이라 가정할때, 가로 5, 세로 5 ( 가능. '가로>= 세로' 조건 성립O..

Algorithm Study 2022.05.25

[프로그래머스] 소수찾기 (level.2) / JAVA/ 완전탐색

https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 완전탐색 문제. ( + 백트래킹 같기도 하고!? ) 1. 배열의 값을 조합하여 모든 경우의 수를 따져야한다. -> 완전탐색으로 함수 구현 solve 2. 최종 String 값을 int로 변환해서. 그 int가 소수인지 확인 -> 소수판단 함수 구현 isPrime 3. 소수의 수 만큼 반환 -> 반환을 어디서 할 것인지 고민! List형을 두어 최종..

Algorithm Study 2022.05.25

[프로그래머스] 체육복 / java, Greedy

https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 레벨1 이지만, 문제 안에 뭔가 신경쓸게 많았던 문제.! - 훔친 당한 학생이 여벌의 체육복을 가지고 있다면, 그 학생은 자신의 여벌 체육복을 입어야한다! - 훔친 학생의 수보다 여벌의 체육복을 가져온 수가 더 많을수도 있다. 나의 경우, 해당 문제를 재귀 or 완전탐색으로 풀어볼까 고민했다.. (?) 재귀로 풀면 안되는 이유, lost[0], lost[2] ....

Algorithm Study 2022.05.23

[프로그래머스] 네트워크 (level.3) / JAVA/ DFS

https://programmers.co.kr/learn/courses/30/lessons/43162?language=java 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 1. 노드의 방문 여부 배열을 2차원으로 할지 1차원으로 할지 고민했다. -> 2차원으로 했기 때문에 check[i][j]= false & check[j][i]=false & computer[i][j]=1 세 조건이 다 만족하는 경우만 dfs를 돌려야했다. * dfs함수가 한번 돌면서 연결되어 있는 정점들을 모두 true로 바꿔주기..

Algorithm Study 2022.05.23

아이템12. toString을 항상 재정의하라

아이템12. toString을 항상 재정의하라 toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라"고 한다. toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다. 포맷을 명시하던 의도를 명확히 밝혀야 한다. 또한 toString이 반환한 값에 포함된 정보를 얻어오로 수 있는 API를 제공하자. 정적 유틸리티 클래스(인스턴스를 만들 수 없는 유틸리티 클래스-아이템4) 는 toString을 제공할 이유가 없다. 대부분의 열거타입도 이미 자바가 완벽한 toString을 제공하므로 재정의하지 않아도 된다. 정리 모든 구체 클래스에서 Object의 toString을 재정의하자. 상위클래스에서 이미 알맞게 재정의한 경우는 예외. toStri..

JAVA/Effective Java 2022.05.22

아이템11. equals를 재정의하려거든 hashCode도 재정의하라

아이템11. equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. Object 명세서 규약 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 hashCode메서드는 몇번을 호출해도 일관된 값을 반환해야한다. equals(Object)가 두 객체를 같다고 판단했다면, hashCode도 똑같은 값을 반환해야 한다. equals(Object)가 두 객체를 다르다고 판단했더라도, 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. 명세서 규약 2번째를 보면 논리적으로 같은 객체는 같은 해시코드를 반환해야 하기 때문에, equals재정의했다면 hashCode도 재정의해야 한다! hashC..

JAVA/Effective Java 2022.05.22

아이템10.equals는 일반 규약을 지켜 재정의하라

아이템10. equals는 일반 규약을 지켜 재정의하라 1. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 게 아니라 동작하는 개체를 표현하는 클래스의 경우. ex. Thread - Object의 equals는 메서드는 이러한 클래스에 딱 맞게 구현되었다. 2. 인스턴스의 '논리적 동치성(logical equality)'을 검사할 일이 없다. java.util.regex.Pattern은 equals를 재정의해서 두 Pattern의 인스턴스가 같은 정규표현식을 나타내는지 검사하는 논리적 동치성을 검사하는 방법도 있다. 하지만 설계자가 논리적 동치성을 검사할 필요가 없다고 판단했다면 Object의 기본 equals만으로 해결된다. 3. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다..

JAVA/Effective Java 2022.05.22

아이템9. try-finally 보다는 try-with-resources를 사용하라.

아이템9. try-finally보다는 try-with-resources를 사용하라 자원이 제대로 닫힘을 보장하는 수단으로 try-finally 가 많이 쓰였다. try-finally 보다 try-with-resouces를 사용하자. (예외는 없다!) 훨씬 간결하고 문제 진단하기가 쉽다. try-finally 를 이용한 자원회수 방법 // try-finally를 이용한 자원회수 방법 - 하지만 최선의 방책이 아니다! static String firstLineOfFile(String path) throws IOException{ BufferdReader br= new BufferedReader( new FileReader(path)); try{ return br.readLine(); } finally{ br..

JAVA/Effective Java 2022.05.21