변수가 먼저 나오고, 그다음에 함수가 나온다.
변수 순서: static->public->private->비공개 인스턴스
함수 순서: 공개함수->자신을 호출하는 비공개 함수(추상화 단계가 순차적으로 내려감)
캡슐화
변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫다.
큰 클래스 하나보다는 작은 클래스 여럿으로 이뤄진 시스템이 더 좋다. 클래스 이름은 해당 클래스 책임을 기술해야 한다. 간결한 이름이 떠오르지 않는다면 클래스 크기가 너무 커서 그렇다.
단일 책임 원칙
단일 책임 원칙은 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다는 원칙이다. (모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함)
책임=변경할 이유 를 파악하려고 하다보면 더 좋은 추상화가 쉽게 떠오른다.
응집도
응집도: 한 모듈 내부의 처리 요소들이 서로 관련되어 있는 정도
일반적으로 우리는 응집도가 높은 클래스를 선호한다. 응집도가 높다는 말은 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미기 때문이다.
응집도를 유지하면 작은 클래스 여럿이 나온다.
클래스가 응집력을 잃는다면 쪼개라. 이렇게 쪼개다 보면 프로그램에 점점 더 체계가 잡히고 구조가 투명해진다.
변경에는 코드가 동작하지 않을 위험이 따른다..끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다.새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 좋다.
변경으로부터 격리
객체 지향 프로그래밍을 배울때 우리는 구체적인 클래스와 추상 클래스가 있다고 배웠다. 상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다. 그래서 우리는 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다.