책
-
아이템17) 변경 가능성을 최소화하라책/이펙티브 자바 3e 2022. 3. 5. 13:44
클래스를 불변으로 만드려면 다음 다섯가지 규칙을 따르면 된다. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. final을 사용하거나 모든 생성자를 private 혹은 package-private으로 만들고 public 정적 팩터리를 제공 모든 필드를 final로 선언한다. 모든 필드를 private으로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 불변 객체의 장점 불변 객체는 단순 시작부터 끝까지 동일함 불변 객체는 근본적으로 스레드 안전하여 따로 동기화할 필요가 없다. 여러 스레드가 동시에 사용해도 절대 훼손되지 않음 불변 객체는 자유롭게 공유할 수 있고, 불변 객체끼리는 내부 데이터를 공유할 수 있다. 값이 변하지 않으니 공유를..
-
전략 패턴책/개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴 2022. 3. 3. 14:30
개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴 전략(strategy) 패턴 (p.175 ~ 181) 과일 매장에 여러가지 할인 정책이 있다.(ex. 첫 손님 10% 할인, vip 15% 할인 등) 이를 코드로 구현하는 방법 중 하나는 if-else를 사용하는 것이다. public class Calculator { public int calculate(boolean firstGuest, boolean vip, List items) { if 첫번째손님이면, 10%할인 else if vip손님이면, 15퍼 할인 } } 이는 두가지 문제점이 있다. 서로 다른 정책들이 하나의 코드에 있어 정책이 늘어날수록 코드분석이 어려워짐 정책이 늘어날수록 확장하기가 어려워짐. 정책에 따른 조건이 매개변수에 추가되어야 ..
-
아이템 22) 인터페이스는 타입을 정의하는 용도로만 사용하라책/이펙티브 자바 3e 2022. 3. 3. 14:29
아이템22) 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 함 즉, 인터페이스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것 인터페이스를 상수 공개용 수단으로 사용하지 말자 상수 인터페이스 안티패턴 - 사용금지! public interface Constants { static final int MAX = 9; static final int MIN = 0; } 상수 유틸리티 클래스 - 이걸 사용하자 public class Constants { private Constants() {} //인스턴스화 방지 static final int MAX = 9; static final int MIN = 0; }
-
ch3. 타입과 추상화책/객체지향의 사실과 오해 2022. 3. 2. 03:58
객체지향의 사실과 오해 3장 타입과 추상화 (p.72 ~ 105) 선요약 시간에 따라 상태가 동적으로 변하는 객체를 정적으로 추상화 한것이 타입이다. 객체는 행동에 따라 동일한 타입으로 분류될 수 있다. 동일한 타입의 객체가 무엇인지 행동에 따라 분류하기 위해선 1. 외부에 제공해야 하는 행동(책임)을 먼저 결정하고, 2. 책임을 수행하는데 필요한 적절한 데이터를 결정해야 한다. 객체와 타입 객체를 분류하고 이름을 붙이는 것은 새로운 타입을 선언하는 것과 같다. 객체가 어떤 타입에 속하는지 결정하는 것은 "객체가 수행하는 행동"이다. 같은 타입에 속한 객체는 행동만 동일하면 서로 다른 데이터를 가질 수 있다. (동일한 행동이란 동일한 책임을 의미하며, 동일한 책임이란 동일한 메시지 수신을 의미한다.) 따..
-
아이템 15) 클래스와 멤버의 접근 권한을 최소화하라 (p96-101)책/이펙티브 자바 3e 2022. 3. 1. 19:00
아이템15) 클래스와 멤버의 접근 권한을 최소화하라 핵심 정리 프로그램 요소의 접근성은 가능한 최소한으로 꼭 필요한 것만 골라 최소한의 public API를 설계 public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져선 안됨 public static final 필드가 참조하는 객체가 불변인지 확인해라 정보은닉의 장점 시스템 개발 속도를 높임 시스템 관리 비용을 낮춤 정보 은닉 자체가 성능을 높이진 않지만, 성능 최적화에 도움을 줌 소프트웨어 재사용성을 높임 큰 시스템을 제작하는 난이도를 낮춤 -> 접근 제한자를 제대로 활용하는 것이 정보 은닉의 핵심 모든 클래스와 멤버의 접근성을 가능한 한 좁히자 클래스의 공개 api를 세심히 설계한 후, 그 외의 모..
-
13장 인터페이스와 추상클래스, enum(그리고 final)책/자바의 신 2022. 2. 27. 14:42
interface는 구현 안 된 메소드만 포함해야 함 그리고 final, static 메서도를 포함 할 수 없음 abstract클래스는 구현 안된 메소드와 구현된 메소드 둘 다 포함할 수 있음 fianl, static메서드도 모두 포함할 수 있음 클래스에 final 예약어가 붙으면 상속 할 수 없는 클래스가 됨 메소드에 final 예약어가 붙으면 override 할 수 없는 메소드가 됨 변수에 final 예약어가 붙으면 변경 불가능한 변수가 됨 final 인스턴스 변수는 생성과 동시에 초기화를 해야 함 public class FinalVariable { final int instanceVariable=1; } final 매개변수나 지역변수는 반드시 선언때 초기화를 안해도 됨 public class Fin..