PE Notes · 사업관리
객체지향 설계
캡슐화·상속·다형성·추상화 네 특징을 SOLID와 잇고, 추상 클래스와 인터페이스, 조합 대비 상속을 정리합니다.
전역 변수에 상태를 쌓으면, 누가 바꿨는지가 함수 이름이 아니라 운입니다. 은 데이터와 행위를 객체로 묶고, 메시지로 협력하게 하는 설계입니다. 네 기둥은 , , , 입니다. 와 GoF 패턴이 이 네 칸 위에 섭니다.
네 특징
캡슐화는 속성과 메서드를 한 타입에 넣고, 내부를 숨깁니다. 이 그 수단입니다. public은 계약, private는 구현입니다. getter로 열어 두되 불변식을 지키는 쪽이, 필드를 그대로 내주는 쪽보다 안전합니다. 저장 방식을 바꿔도 호출부는 그대로입니다.
상속은 자식이 부모 타입인 is-a입니다. 재사용과 계층 표현이 목적입니다. 단일 상속은 구현을 하나에서만 받고, 인터페이스 상속은 계약만 받습니다. 다중 구현 상속은 다이아몬드에서 어느 부모의 메서드인지가 흔들립니다.
다형성은 같은 상위 호출이 실제 타입에 따라 달라지는 일입니다. 오버라이딩은 런타임에 자식을 고르고, 오버로딩은 컴파일에 인자 시그니처를 고릅니다. 결제 인터페이스에 카드·계좌를 끼우면 호출부는 그대로입니다. 가 여기서 열립니다.
추상화는 현실에서 지금 필요한 속성과 행위만 남기는 일입니다. 추상 클래스는 일부 구현과 생성자를 가질 수 있고 직접 만들지 않습니다. 인터페이스는 할 수 있는 일의 계약입니다. 공통 뼈대면 추상 클래스, 여러 역할의 능력이면 인터페이스입니다.
| 비교축 | 추상 클래스 | 인터페이스 |
|---|---|---|
| 구현 | 일부 가능 | 계약이 기본 |
| 다중 | 구현 상속은 보통 하나 | 여러 계약 가능 |
| 관계 | is-a 계층 | can-do 능력 |
| 자리 | 공통 뼈대 | 역할 포트 |
절차형과의 차이
절차형은 함수가 중심에 있고 데이터가 전역으로 흐릅니다. 객체지향은 데이터가 객체 안에 있고, 함수가 그 객체의 메서드입니다. 재사용이 복사에서 타입 계층·위임으로 옮겨 갑니다. 확장은 기존 함수를 고치는 일이 아니라 새 타입을 더하는 일에 가깝습니다.
| 비교축 | 절차형 | 객체지향 |
|---|---|---|
| 중심 | 함수 | 객체 |
| 데이터 | 공유·전역 | 캡슐 안 |
| 재사용 | 함수 복사 | 상속·위임 |
| 확장 | 기존 수정 | 새 타입 |
SOLID와 조합
추상화는 OCP·DIP와, 캡슐화는 과, 상속은 과, 다형성은 OCP·와 만납니다. 큰 인터페이스를 역할로 쪼개야 클라이언트가 안 쓰는 메서드에 묶이지 않습니다.
구현을 공짜로 받으려고 상속하면 기반 클래스가 흔들릴 때마다 자식이 같이 흔들립니다. 기능 조립은 이 기본입니다. is-a이고 LSP를 지키면 상속, has-a이면 위임입니다. 자세한 두 원칙은 상속 vs 조합 글에 둡니다. 패턴은 이 네 특징을 반복 가능한 형으로 묶은 것입니다.
답안은 네 이름과 한 줄, 오버라이딩≠오버로딩, 추상 클래스≠인터페이스, SOLID 한 줄, 조합 선호를 한 장에 닫습니다.