1) 변수의 값, 함수의 세부 구현 내용을 몰라도 이름만 알면 사용 가능하도록 한 것
2) 공통부분으로 묶어 정의하는 것
1) 객체의 일부 구현 내용에 대해 외부로부터의 직접적인 접근을 제어하는 것 (출력, 수정 등)
2) 객체의 속성과, 그것을 사용하는 행동을 하나로 묶는 것
⇨ 프로그램 안정성을 위한 자기구속
1) 캡슐화하고자 하는 변수나 메소드 앞에 underbar
: 클래스 밖에서 직접 접근하지 말라는 경고 표시
2) 메소드를 통해 변수에 간접 접근하기 (변수를 메소드로 캡슐화)
: getter, setter 메소드, 데코레이션, 추상클래스
cf) Python은 완벽한 캡슐화를 지원하지 않음
클래스 밖에서의 접근을 어렵도록 하는 기능(double underbar)가 있으나,
name mangling된 새로운 이름으로 접근 가능
1) 캡슐화하고자 하는 변수나 메소드 앞에 접근지정자 "private"
: 클래스 밖에서 직접 접근 차단
2) 메소드를 통해 변수에 간접 접근하기 (변수를 메소드로 캡슐화)
: getter, setter 메소드
부모 클래스(super class)의 코드를 자식 클래스(sub class)에게 물려주는 것
여러 부모 클래스로부터 상속받을 수 있음
But, 부모를 참조할 때의 애매함 때문에 몇몇 언어에선 지원 X
상속 우선순위를 신경쓰지 않기 위해서는
1) 부모 클래스끼리 같은 이름의 메소드를 갖지 않아야 함
2) 부모-자식 클래스 간 같은 이름의 메소드는 오버라이딩해야 함
여러 형태를 가질 수 있음
: 클래스 내 하나의 변수가 여러 클래스의 인스턴스를 가리킬 수 있음
리스트와 반복문 활용
: A클래스 내 정의된 리스트에 다른 클래스의 인스턴스 추가 → A클래스 내 for문으로 리스트에 들어있는 다른 클래스의 인스턴스 호출
추상클래스* 활용
: 추상클래스인 부모클래스를 호출 → 추상클래스는 인스턴스를 갖지 못하므로 자식클래스들의 인스턴스가 호출됨
추상화된 클래스 = 공통부분으로 묶인 클래스
순수 가상 함수 · 추상메소드의 오버라이딩 강제
→ 오버라이딩을 하지 않으면 부모클래스처럼 추상클래스가 됨
부모클래스로의 사용이 목적이므로 인스턴스 생성 불가
→ 상속관계를 통해서만 사용가능
: 입력 파라미터가 여러 타입을 가질 수 있음