본문 바로가기
반응형

엘레강트오브젝트23

[엘레강트 오브젝트] 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.
[엘레강트 오브젝트] 3.4 충성스러우면서 불변이거나, 아니면 상수이거나 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 불변 객체 예시를 알아보자 정리 관련해서 생각해볼 내용 불변 객체 불변 객체의 잘못된 사고 방식 불변 객체의 메서드를 호출할 때마다 상수(constant)처럼 매번 동일한 데이터가 반환되리라 기대 다시 말해서 모든 불변 객체가 문자열 리터럴이나 숫자처럼 동작하리라고 생각 불변 객체의 정의에 따르면 적절해 보일 수도 있겠지만 결론적으로 이런 사고 방식은 틀렸다. 결과가 변하기 때문에 상수는 아니지만, 객체가 대표하는 엔티티에 충성하기 때문에 불변 객체로 분류된다. 객체의 정의는 다음과 같다. 디스크에 있는 파일, 웹 페이지, 바이트 배열, 해시맵, 달력의 월과 같은 실제 엔티티의 대표자 기본적으로 모든 객체는 식별자, 상태, 행동을.. 2023. 3. 22.
[엘레강트 오브젝트] 3.3 인자의 값으로 NULL을 절대 허용하지 마세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. NULL NULL 처리 방법 정리 관련해서 참고해볼 내용 코드 어딘가에 NULL이 존재한다면 커다란 실수를 저지르고 있는 것이라고 말한다. 사실, 전달할 객체가 없으므로 값이 없는 것으로 간주하세요 라는 의사를 표현할 수 있도록 사용자에게 진짜 객체 대신 NULL을 전달하도록 허용하는 것은 일반적인 방법이다. NULL NULL을 허용하는 find() 메서드를 구현하기 위해서는 다음과 같이 분기를 처리할 필요가 있습니다. public Iterable find(String mask) { if (mask == NULL) { // 모든 파일을 찾는다 } else { // 마스크를 사용해서 파일을 찾는다 } }객체를 존중한다면 다음과 같이.. 2023. 3. 22.
[엘레강트 오브젝트] 3.2 정적 메소드를 사용하지 마세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 객체 대 컴퓨터 사고 선언형 스타일 대 명령형 스타일 유틸리티 클래스 싱글톤 패턴 함수형 프로그래밍 조합 가능한 데코레이터 정리 정적 메서드를 사용하는 대신 객체를 사용해야 한다. 정적 메소드만 있는 객체는 소프트웨어를 유지보수하기 어렵게 만든다. 객체 대 컴퓨터 사고 컴퓨터처럼 생각하기 순차적인 사고 방식 컴퓨터는 어떤 한 위치에서 명령을 실행하기 시작하고 또 다른 위치에서 실행을 중단한다. 명렁의 실행 흐름을 제어할 책임이 우리에게 있다. ex) 정적 메서드 객체지향적으로 생각하기 CPU에게 할 일을 지시하는 것이 아니라 정의 우리는 그저 누가 누구인지만 정의하고 객체들이 필요할 때 스스로 상호작용하도록 제어를 위임한다. ex.. 2023. 3. 12.
[엘레강트 오브젝트] 3.1 5개 이상의 public 메서드만 노출하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 메소드 크기 정리 가장 우아하고, 유지보수가 가능하고, 응집력이 높으면서, 테스트하기도 용이한 객체는 작은 객체 이다. 메소드 크기 클래스의 크기를 정하는 기준으로 public 메서드(protected 메서드 포함)의 개수를 사용하기를 권장한다. 여기에서는 저자가 적절하다고 생각하는 객체의 public 메서드의 수는 5개이다. 구체적인 숫자를 언급한 이유는 public 메서드의 수에 제한이 있고, 그 제한이 매우 작다는 사실을 설명하기 위해서이다. 클래스를 작게 만들어서 얻는 이득으로는 무엇이 있을까? 다음 4가지의 장점이 있다. 우아함 유지보수성 응집도 테스트 용이성 가장 중요한 것은 유지보수성이다. 더 작은 클래스는 유지보수하.. 2023. 3. 12.
[엘레강트 오브젝트] 2.9 인터페이스를 짧게 유지하고 스마트(smart)를 사용하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 스마트 클래스 데코레이터 활용 정리 스마트 클래스 클래스를 작게 유지하는 것이 중요하다면, 인터페이스를 작게 만드는 것은 훨씬 더 중요하다. interface Exchange { float rate(final String target); float rate(final String source, final String target); } 같은 기능을 동작하는 2개의 인터페이스 메소드는 구현 클래스에게 너무 많은 것을 요구하고 있다. 이런 종류의 계약은 단일 책임 원칙(Single Responsibility Principle)을 위반하는 클래스를 만들도록 유도한다. 두 rate 메서드는 매우 밀접하게 연관되어 있지만 두 개의 독립적인.. 2023. 3. 12.
반응형