2021-01-14-TIL
2021-01-14-TIL
Smalltalk 30분 튜토리얼
small talk 30min tutorial
객체지향 언어의 역사
제록스 -> 마우스, GUI, 카피머신
GUI 프로그래밍을 잘 하기위해서 small talk 언어를 만들었다.
Smalltalk는 1970년대 Xerox PARC(팰로앨토 연구소)에서 Alan Kay를 중심으로 만들어졌다. Kay가 직접 쓴 “The Early History of Smalltalk”를 보면, Smalltalk는 비트맵 화면을 가진 Alto 컴퓨터의 주 소프트웨어였고, 겹치는 창과 마우스로 조작하는 화면이 이 환경에서 함께 만들어졌다. 지금 우리가 쓰는 GUI의 많은 요소가 여기서 나왔다.
Kay가 생각한 객체는 데이터 묶음이 아니라 작은 컴퓨터에 가깝다. 각 객체는 자기 상태를 스스로 관리하고, 다른 객체와는 메시지를 주고받는 방식으로만 협력한다. 화면 위의 창, 버튼, 메뉴가 각자 사용자 입력에 반응하는 GUI는 이런 모델과 잘 맞는다.
현실 세계와 소프트웨어 세계
자율성여부가 현실세계와 소프트웨어 세계의 가장 큰 차이이다.
현실의 커피 잔은 스스로 아무것도 하지 않지만, 소프트웨어의 커피 잔 객체는 “남은 양을 알려 달라”는 메시지를 받으면 스스로 답한다. 객체지향 설계에서는 현실의 수동적인 사물도 자기 상태를 직접 책임지는 자율적인 객체로 만든다.
삼각형의 넓이 구하기
- 헤론의 공식 : 위키백과
세 변의 길이 a, b, c만 알 때 넓이를 구하는 공식이다. 둘레의 절반 s = (a + b + c) / 2를 먼저 구하고, 넓이 = √(s(s−a)(s−b)(s−c))로 계산한다. 좌표나 높이 없이 변의 길이만 입력으로 받는 문제에서 쓸 수 있다.
1
2
double s = (a + b + c) / 2.0;
double area = Math.sqrt(s * (s - a) * (s - b) * (s - c));
세 변이 삼각형을 이루지 못하면(가장 긴 변이 나머지 두 변의 합 이상이면) 근호 안이 0 이하가 된다. 그래서 계산 전에 삼각형 조건을 먼저 검사한다.
Comparing Java objects with equals() and hashcode()
Object.equals()의 기본 구현은 두 참조가 같은 객체를 가리킬 때만 true다. 값이 같은 두 객체를 같다고 보려면 오버라이딩해야 하고, 이때 Javadoc이 정한 규약(반사성, 대칭성, 추이성, 일관성, null과 비교하면 false)을 지켜야 한다.
equals()를 오버라이딩하면 hashCode()도 함께 오버라이딩해야 한다. Javadoc의 일반 규약은 equals()로 같은 두 객체가 같은 해시 코드를 돌려줘야 한다는 것이다. 이를 어기면 HashMap이나 HashSet에 넣은 객체를 같은 값으로 다시 찾지 못한다. 해시 기반 컬렉션은 해시 코드로 먼저 버킷을 고른 뒤 그 안에서 equals()로 비교하기 때문이다. 자세한 내용은 Java에서 객체 비교를 어떻게 해야 하는가에 정리했다.
SOLID principles in Java
SOLID는 Robert C. Martin이 정리한 객체지향 설계 원칙 다섯 가지의 머리글자다. 단일 책임(SRP), 개방-폐쇄(OCP), 리스코프 치환(LSP), 인터페이스 분리(ISP), 의존 역전(DIP)이다. 이 가운데 SRP를 Martin은 “모듈이 바뀌어야 하는 이유는 하나뿐이어야 한다”로 설명한다. 각 원칙을 실무에서 어떻게 읽을지는 SOLID 원칙을 실무적으로 어떻게 이해해야 하는가에 따로 정리했다.
댓글
아직 댓글이 없습니다