변수를 정의하자면 메모리에 할당한 주소가 가진 별명이다.
변수의 데이터 타입은 해당 메모리 주소로부터 얼마만큼의 공간을 차지하고 있는지를 의미한다.
메모리의 길이
에 집중한다.int a = 7
: a
라는 별명을 가진 메모리에 int
만큼 7을 할당한다.객체지향에서 말하는 타입은 위의 타입과는 다르다.
객체지향의 개념을 표현하는 단위 개념
Role: 형을 통해 역할을 묘사한다.
Responsibility: 형을 통해 로직을 표현
Message: 형을 통해 메세지를 공유
String
이나 int
는 값이다. 타입이 아니다. 객체지향은 참조 컨텍스트를 이용한다.Protocol: 객체 간 계약을 형을 통해 공유
Generic Type
으로 사용할 수 없는 단점이 존재한다.Utility 와 Method를 구분하는 방법
Method에 this가 존재하지 않으면 Utility 함수이다.
즉시 해당 클래스에서 제거하고 유틸리티로 구분해서 사용해야 한다.
Utility는 클래스 인스턴스에 존재하면 안된다.Utility는 인자와 지역변수만을 갖거나 모두가 공유하는 전역적인 컨텍스트를 갖는다.
런타임 시 조건에 따라 변할 수 있는 상태여만 분기가 의미를 갖는다.
if
문은 2단계부터 감당하기 쉽지 않다.class ConditionalStatementExample {
public void conditionProcess(String condition) {
if (condition.equals("a")) {
a();
} else if (condition.equals("b")) {
b();
} else if (condition.equals("c")) {
c();
} else {
d();
}
}
}
class ConditionalStatementExample {
public static void main(String[] args) {
String v = "c";
Runnable run = null;
if (v.equals("a")) {
run = () -> System.out.println("a")
} else if (v.equals("c")) {
run = () -> System.out.println("c")
}
}
//처리기
public void conditionProcess(Runnable condition) {
condition.run();
}
}
if
의 변화를 클라이언트 레이어로 이전하는게 목적이다.변화율에 따른 격리를 통하여 분기를 처리할 수 있다.
프로그램의 가치 = 제공하는 기능에 대한 책임
책임과 역할을 따로 나누는건 어려운 일이다. 하지만 연역법을 통해 추상화에 성공하면 귀납법에 의해 다른 사례를 손쉽게 만들어낼 수 있다.
책 137 page
헤드퍼스트 디자인패턴 372 page 반복자 패턴
어떻게
언제(조건)
부모관계가 없는 타입을 어떻게 처리해야하는가
DiscountPolicy에 추가가 된다면 어떤 변화가 일어나는지 확인해볼 것