꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

JAVA

객체 지향의 4대 특성

gold_dragon 2021. 10. 3. 18:30

객체 지향의 4대 특성은 다음과 같습니다.

 

1. 캡슐화 : 정보 은닉

2. 상속 : 재사용 + 확장

3. 추상화 : 모델링

4. 다형성 : 사용 편의

추상화 : 모델링

추상화란 구체적인 것을 분해해서 관심 영역(Application Boundary)에 있는 특성만 가지고 재조합하는 것입니다. 사람이라는 클래스가 있다면, 관심 영역이 병원이라면 환자에 맞추어 사람 클래스를 구상할 것이고, 은행이라면 고객에 맞추어 사람 클래스를 구상할 것입니다. 이런 모델링은 객체 지향에서 클래스를 설계할 때 필요한 기법이고 또한 데이터 베이스의 테이블을 설계할 때 필요한 기법입니다.

상속 : 재사용 + 확장

객체 지향에서 상속은 계층도가 아닙니다. 분류도로 이해를 해야됩니다. 예를 들어 할아버지 <- 아버지 관계가 있다고 했을 때, '아버지는 할아버지이다'라고 해석하면 이상합니다. 하지만 동물 <- 펭귄 관계에서는, '펭귄은 동물이다'로 자연스럽게 해석이 가능합니다. 이처럼 분류도로 이해를 해야됩니다.

또한 상속은 상위 클래스에 구현된 메서드를 하위 클래스에서 그대로 쓸수 있기 때문에 중복을 줄일 수 있습니다.

또한 대부분의 서적에서 상속은 is a 관계를 만족해야 된다고 합니다. 여기서 주어는 하위 클래스입니다. 보어는 상위 클래스입니다. 즉 하위 클래스 is a 상위클래스가 됩니다.

해석하면 "하위 클래스는 하나의 상위 클래스이다"가 됩니다. 그런데 하위 클래스와 상위 클래스는 분류 단위인데, 하나의 상위 클래스는 하나의 객체가 됩니다. "하위 클래스는 하나의 객체다"라고 해석될 수도 있는데 논리가 성립되지 않습니다.

is a 대신에 is a kind of 관계가 더 명확하다고 생각됩니다.

"하위 클래스 is a kind of 상위 클래스" -> 하위 클래스는 상위 클래스의 한 분류다.

 

번외로 인터페이스는 is able to 관계로 이해할 수 있습니다.

"구현 클래스 is able to 인터페이스" -> 구현 클래스는 인터페이스할 수 있다.

다형성 : 사용편의성

오버라이딩, 오버로딩이 이 특성에 해당합니다. 오버라이딩은 상위 클래스의 메서드와 같은 시그니처(이름, 반환형, 인자)로 메소드를 재정의하는 것을 말합니다. 오버로딩은 메소드 이름만 같고, 시그니처가 다른 것을 말합니다. 이때 변수 타입을 상위 클래스로 써서, 메소드를 호출한다고 해도 하위 클래스에서 오버라이딩한 메소드의 로직이 호출됩니다.

캡슐화 : 정보 은닉

접근 제어자를 통해 객체 외부에서 내부 데이터의 접근을 통제할 수 있습니다. 상속을 받지 않았다면 객체 멤버는 객체를 생성한 후 객체 참조 변수를 이용해 접근해야 합니다. 또한 정적 멤버는 클래스명.정적멤버 형식으로 접근하는 것을 권장합니다. 사람.다리수와 석금용.다리수, 천화영.다리수를 비교해보면 논리적으로 사람.다리수가 맞아보입니다. 또한 해당 멤버에 접근할 때에도 클래스로 접근하는 것이 조금이나마 빠릅니다.


- 출처 -

객체 지향의 4대 특성에 대해 :

김종민, 스프링 입문을 위한 자바 객체 지향의 원리와 이해

'JAVA' 카테고리의 다른 글

객체 지향 설계의 5가지 원칙 (SOLID)  (0) 2021.10.03
자바 프로그램 개발과 구동  (0) 2021.09.14
Java 변수  (0) 2021.09.10
클래스와 객체  (0) 2021.09.09
객체 지향 언어란? (Object Oriented Language)  (0) 2021.06.17