OOP에서 사용되는 용어를 자유롭게 사용하지만 한마디로 정의하라면 그게 쉽지 않다 그래서 한번 정리해 보도록 하자!

인터페이스(Interface): 

1. 인터페이스 = 기능 = 약속(protocal) -> 기능은 변하지 않는다.

2. 100% 추상클래스(Abstract Class)다.

3. 상수(public static final)와 추상메서드(Abstract method)만을 같는다.(필드 X)

4. 다중 상속이 가능하다.

클래스(Class): 객체의 타입

객체(Object): 

1. 상태(Status)/특성(Characteristic), 오퍼레이션(Operation)/행동(Behaviour), 정체성(Identity)/고유 식별(고유 메모리/힙에 할당)을 같는다. 

2. 클래스의 인스턴스(Instance)이다.

3. 문제 영역의 요소들을 해결 영역에 표현한 것.

is-a 관계: 상속하여 대체 가능한 객체를 만드는 것.

위임(Delegation): 특정일의 책임을 다른 클래스나 메소드에 맡기는 것. (상속의 대안)

참조: http://java.ihoney.pe.kr/24

has-a 관계: 한 객체안에 다른 멤버 객체를 생성하는 것.

1. 구성(Composition)/A owns B: 한 객체가 다른 객체를 구성하고있다.(가지고 있다)

-> 하나의 인터페이스로 구현한 여러 클래스를 사용가능(객체를 서로 바꾸어 쓸 수 있다.)

-> 구성하는 객체의 소멸시 종속된 객체도 같이 사라진다.

2. 집합(Aggregation)/B is part of A: 한 객체가 다른 객체를 참조한다.

-> 참조하는 객체가 소명되도 참조되는 객체는 사라지지 않는다.

참조: http://valley.egloos.com/viewer/?url=http://ryukato.egloos.com/740197 

is-like-a 관계: 상속에서 파생된 객체에 메서드를 추가하면 베이스 타입에서는 사용할 수 없는 것.

오버라이딩(Overriding): 상속에서 슈퍼 클래스의 메서드를 서브 클래스에서 재 정의하는 것.

-> 자바 SE5 버전에서는 @Overrride 주석 태그가 추가되어 오버라이딩 할것을 오버로딩하려면 에러를 낸다.

-.> 오버라이딩을 방지하기위해 상위 클래스에서 final 키워드를 사용하여 메서드를 정의할 수 있다.

오버로딩(Overloading): 같은 메서드 명으로 인자 갯수를 다르게하여 여러 메서드를 생성하는 것.

다형성: 인터페이스와 구현을 분리시켜 확장 가능하고 가독성을 제공한다. late 바인딩으로 가능(동적 바인딩, 런타임 바인딩 이라고도 함)

-> 서로다른 타입의 객체들이 같은 메시지에 대해 제각기 다른 결과를 산출하는 개념

-> 슈퍼 클래스를 이용하는 코드에서 수정없이 서브 클래스를 사용할 수 있다.

업케스팅: 파생 타입의 객체를 베이스 타입으로 참조하는 것

-> 업케스팅은 쉽게 가능 하지만 다운 케스팅은 고려해 봐야 함

캡슐화: 접근 제한 (public, private, protected)

Posted by Brian B. Lee