DEV ℧ Developer Diary

[EffectiveJava] item13 - clone 재정의는 주의해서 진행하라.

clone 재정의는 주의해서 진행하라.

Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스 (mixin interface)지만, clone 메서드가 선언된 곳이 Cloneable이 아닌 Object이고, protected라는 문제점이 있다.

clone() 메서드는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성한다. Cloneable를 implements하여 사용 한다.

Cloneable의 동작방식

[DesignPattern] 빌더 (Builder)

빌더(Builder)

객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 동일한 절차에서 서로 다른 표현으로 생성할 수 있도록 제공해줍니다. 이펙티브 자바 item02 에 나온 Builder와는 다르게 좀더 방법론적으로 설명 해준다고 생각해주면 된다.

차이점을 간단하게 구분해 주자면, 이펙티브 자바의 빌더패턴의 경우 생성자에 매게변수를 받아...

[Gold5] No.18405 경쟁적 전염

경쟁적 전염

No.18405 경쟁적 전염

문제

NxN 크기의 시험관이 있다. 시험관은 1x1 크기의 칸으로 나누어지며, 특정한 위치에는 바이러스가 존재할 수 있다. 모든 바이러스는 1번부터 K번까지의 바이러스 종류 중 하나에 속한다.

시험관에 존재하는 모든 바이러스는 1초마다 상, 하, 좌, 우의 방향으로 증식해 나간다....

[EffectiveJava] item12 - toString을 항상 재정의하라.

toString을 항상 재정의하라.

Object의 객체들을 System.out.println();으로 감싸보자.

그러면 클래스의 해당하는 문자열을 반환하는 경우는 거의 없고 java.lang.Object@3ac3fd8b와 같은 클래스_이름@16진수로_표현한_해시코드를 반환 할 뿐이다.

toString의 일반 규약에 따르면 ‘간결하면서 사람이 읽기 쉬운 형태의 유익한 정보’를 반환 해야 한다.

만약 item11에서 사용한...

[Gold5] No.15686 치킨배달

치킨 배달

No.15686 치킨배달

문제

크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는...