목록이펙티브자바 (26)
초보개발자 긍.응.성

용어 제네릭 클래스 : 클래스의 선언에 타입 매개변수가 쓰인 클래스 제네릭 인터페이스 : 인터페이스의 선언에 타입 매개변수가 쓰인 인터페이스 제네릭 타입 : 제네릭 클래스와 제네릭 인터페이스를 통틀어 제네릭이라고 부른다 매개변수화 타입 (parameterized type) : 제네릭 타입에 실제 매개변수가 함께 선언된 타입 로 타입 (raw type) : 제네릭 타입에서 타입 매개변수를 사용하지 않을 때의 타입 예를 들어 매개변수화 타입이 List 이라면 실제 타입 매개변수는 String이며 로 타입은 List이다. 제네릭 타입을 하나 정의하면 그에 딸린 로 타입(raw type)도 함께 정의된다. 로 타입의 사용 제네릭 대신 로 타입을 사용해도 동작을 하지만 좋은 예가 아니다 (하위 호환성을 위해 지원..

톱 레벨 클래스 톱레벨톱 레벨 클래스는 소스파일에서 가장 바깥에 존재하는 클래스를 말한다. 일반적으로 하나의 소스파일에서는 하나의 톱 레벨 클래스를 가진다. 예로 파일 이름이 SimpleService.java라면 클래스 이름도 SimpleService로 하나의 톱 레벨 클래스를 갖는다. 사실 소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러의 동작에는 아무런 문제가 없다. 단 이런 사용은 아무런 득이 없을뿐더러 심각한 위험을 감수해야 하는 행위다. 다수의 톱레벨 클래스 정의의 문제점 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라진다. public class Main { public static void main(S..

상속(extends)과 컴포지션에 대하여 알아보자. 상속 (inheritance) 상속은 코드를 재사용하는 강력한 수단이다. 하지만 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 된다. 상속의 위험성 캡슐화를 깨뜨린다. 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있다. 상위 클래스의 수정이 하위 클래스가 영향을 끼친다. 새로운 메서드가 추가된다면 하위 클래스에서 의도에 맞게 동작하도록 수정하여야 한다. 컴포지션 (Composition) 앞서 상속을 사용할 때 일어날 수 있는 위험성에 대하여 이야기하였다. 하지만 컴포지션을 통해 앞서 본 문제들을 피해 갈 수 있다. 컴포지션은 기존 클래스가 새로운 클래스의 구성요소로 쓰인다는 것을 의미한다. 새로운 클래스는 컴포지션을..

불변 클래스의 장단점과 생성 방법을 알아보자. 불변 클래스 불변 클래스는 인스턴스의 내부 값을 수정할 수 없는 클래스다. 이 정보는 객체가 파괴되는 순간까지 절대 달라지지 않는다. 불변 클래스의 예시로는 String, 기본 타입의 박싱 된 클래스, BigInteger, BigDecimal이 존재한다. 불변 클래스로 만들기 위한 규칙 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 모든 필드를 final로 선언한다. 모든 필드를 private로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. public final class Complex { // final 클래스 - 확장 불가 private final double re; // 필드를 p..

기본적으로 java 파일마다 하나의 public 클래스를 생성한다. public 클래스에서 필드에 지정해야 할 접근자 타입에 대하여 알아보자. public 클래스 public 클래스는 패키지 바깥에서도 접근 가능하다. 그렇기에 public 클래스의 데이터 필드는 private 접근자를 이용하여 노출을 제한해줄 필요가 있다. public 클래스가 필드를 public으로 공개하면 클라이언트는 이를 활용하기 때문에, 접근 및 수정이 일어날 수 있다. 불변(final) 필드라면 public 으로 선언하더라도 수정이 일어나지 않겠지만, 여전히 API를 변경하지 않고는 표현 방식을 바꿀 수 없다는 단점이 존재한다. public 클래스 접근 제한 private 접근 제한자를 통해 필드를 공개하지 않도록 하고, 생성한..

정보은닉을 위해 사용하는 접근 제한자와, 접근 제한자의 사용법을 알아보자. 정보 은닉의 장점 여러 컴포넌트를 병렬로 개발하여 시스템 개발 속도를 높인다. 각 컴포넌트를 더 빨리 파악하여 디버깅 할 수 있고, 다른 컴포넌트로 교체하는 비용도 적기 때문에 시스템 관리 비용을 낮춘다. 성능 최적화에 도움을 준다. 소프트 웨어 재사용성을 높인다. 개별 컴포넌트들의 동작을 검증할 수 있기에, 큰 시스템을 제작하는 난이도를 낮춰준다. 접근 제한자 정보 은닉을 위해 자바에서는 접근 제한자를 활용한다. 기본 원칙: 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다 접근 제한자의 종류 private: 멤버를 선언한 톱레벨 클래스에서만 접근할 수 있다. package-private: 멤버가 소속된 패키지 안의 모든 클..