본문 바로가기
반응형

캡슐화5

[엘레강트 오브젝트] 3.5 절대 getter와 setter를 사용하지 마세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. getter와 setter 정리 관련해서 생각해볼 내용 getter와 setter getter와 setter의 형태는 다음과 같다. class Cash { private int dollars; public int getDollars() { return this.dollars; } public void setDollars(int value) { this.dollars = value; } } 위 클래스는 다음과 같은 문제점이 있다. 이 클래스는 가변이고, 두 개의 메서드는 이름이 잘못 지어졌고, 생성자도 없다. 가변성, 메서드 이름, 생성자가 하나도 없다는 사실보다 더 큰 문제는 해당 클래스는 단순한 자료구조이다. 객체 대 자료구조 .. 2023. 3. 22.
[엘레강트 오브젝트] 2.5 퍼블릭 상수(Public Constant)를 사용하지 마세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있다. 상수 잘못된 사용 어떻게 해결할까? 또 다른 예 정리 상수 상수를 사용하는 이유는 데이터를 공유하기 위한 목적이다. 그래서 public static final 을 사용한다. 하지만 실제 객체들은 어떤 것도 공유해서는 안되고 독립적으로 닫혀 있어야 한다. 아래 예시를 통해서 알아보도록 하겠다. class Records { private static final String EOL = "\r\n"; void write(Writer out) { out.write(rec.toString()); out.write(Recoreds.EOL); } } EOL 상수는 private으로 선언되어 있어서 Records 클래스 안에서만 사용되기 때문에 바람.. 2023. 3. 12.
[엘레강트 오브젝트] 2.2 최소한 뭔가는 캡슐화하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 다음 목차로 진행합니다. 캡슐화 연습해보기 실습 정리 캡슐화 프로퍼티가 없는 클래스는 객체지향 프로그래밍에서 정적 메소드와 유사 아무것도 캡슐화하지 않는 방식은 바람직하지 않다. 이러한 클래스들은 아무런 상태와 식별자도 가지지 않고 오직 행동만을 포함한다. 연습해보기 실행으로부터 인스턴스 생성을 고립시켜야 한다. 오직 생성자에서만 new 연산자를 허용해야 한다. 좌표가 없는 객체는 무언가를 캡슐화해야 한다. 객체는 자기 자신을 식별할 수 있도록 다른 객체들을 캡슐화해야 한다. 실습 로또 예를 들어서 확인해보도록 하겠다. 로또 6개의 번호 중 하나의 번호를 책임지는 객체가 있다. 아래와 같은 객체는 필요할까? 해당 객체는 식별자나 .. 2023. 3. 1.
[엘레강트 오브젝트] 2.1 가능하면 적게 캡슐화하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 다음 목차로 진행합니다. 객체의 캡슐화 객체의 집합체 연습해보기 관련해서 참고해볼 내용 객체의 캡슐화 내부에 캡슐화된 객체 전체를 가리켜 객체의 상태(state) 또는 식별자(identity) 아래는 Cash의 상태 또는 식별자를 나타내는 필드로, Cash의 집합체 class Cash { private Integer digits; private Integer cents; private String currency; } 동일한 값의 달러, 센트, 통화를 캡슐화하는 Cash 클래스의 두 객체는 서로 동일합니다. Cash x = new Cash(29, 95, "USD"); Cash y = new Cash(29, 95, "USD"); a.. 2023. 3. 1.
[아이템18] 상속보다는 컴포지션을 사용하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아닙니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 됩니다. 상위 클래스와 하위 클래스를 모두 같은 프로그래머가 통제하는 패키지 안에서라면 상속도 안전한 방법입니다. 상속의 문제점 메소드 호출과 달리 상속은 캡슐화를 깨뜨리게 됩니다. 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있습니다. public class InstrumentedHashSet extends HashSet { // 추가된 원소의 수 private int addCount = 0; public InstrumentedHashSet() { .. 2022. 9. 18.
반응형