2026.05.10. 19:25
1. 캡슐화
1) 개체의 데이터(멤버변수)와 동작(메서드)을 하나로 묶음
2) 정보 숨기기 : 개체 안에 있는 데이터를 외부로부터 보호
클래스 만들기, private 멤버변수
사용자가 클래스 속을 알 필요가 없음.
2. 상속
이미 존재하는 개체를 기반으로 확장된 개체를 만드는 방법
확장된 개체
기존 개체에 속한 데이터와 동작을 모두 물려받음.
여기에 다른 데이터나 동작을 추가할 수 있음.
실용적 용도 : 코드 중복을 막음
사람에게는 점진적 학습이 가장 효율적
3. 다형성
같은 지시를 내렸는데 다른 종류의 개체가 동작을 달리하는 것
어떤 함수 구현이 실행될지는 실행 중에 결정: late binding
일반적인 함수 호출은 이른 바인딩(early binding) : 컴파일 중에 결정
다형성의 혜택을 받으려면 상속 관계가 필요
부모 개체에서 함수 시그내처를 선언
자식 개체에서 그 함수를 다르게 구현(오버라이딩)
참고 : 다른 형태의 다형성
애드혹 다형성 : 함수 오버로딩, 연산자 오버로딩 - 함수명은 같은데 매개변수 목록이 다름.
매개변수 다형성 : 제네릭, C++의 템플릿
4. 추상화
개체 사용 시 그 안에 정확히 어떤 데이터가 있는지 알 필요 없음.
개체 안에 있는 데이터에 직접 접근 불가
캡슐화는 데이터 추상화를 이루는 방법 중 하나
다형성을 통한 추상화
추상클래스, 인터페이스를 사용한 추상화
ex) private 멤버변수와 setter / getter
추상 자료형쪽 관점 : 클래스를 자료형으로 사용.
절차적 데이터 추상화쪽 관점 : 데이터를 직접 조작하는 대신 메서드를 호출
추상화의 단점 :
동작 없이 데이터만 있는 클래스는 쓸데 없는 코드만 늘어남
어떻게 추상화를 해야하는지 뚜렷한 객관적 기준이 없음.
ㄴ OOP 4대 특성 여기까지
5. 연관
어떤 개체가 제공하는 기능을 다른 개체가 이용하는 관계
상속은 자식개체가 부모 개체의 모든 것을 내포
연관은 한 개체가 다른 개체를 참조
세부적으로 다시 집합과 컴포지션으로 나누기도 함.
6. 컴포지션
합성, 조합, 조립, 구성 등 다양한 번역어가 존재.
여러 개의 부품을 조립해서 새 개체를 만드는 방법
집합과의 차이
부품 그 자체로는 존재 의의가 없음
조립품이 소멸할 때 부품도 같이 소멸(즉, 부품은 조립품의 수명을 따름)
7. 집합
여러 개체를 모아 다른 개체를 만들지만 별도로 존재 가능.
ex) A대학에 등록한 학생들
컴포지션과 차이
각 개체들이 개별적으로 살아남을 수 있음.