-
다형성과 인터페이스JAVA/[김영한 강사님] 스프링 2022. 8. 21. 22:38
2022.08.21 - [JAVA/[김영한 강사님] 스프링] - 01. 객체 지향 프로그래밍이란?
01. 객체 지향 프로그래밍이란?
객체 지향 프로그래밍이란 무엇일까? 위키백과에서의 정의는 다음과 같다. 컴퓨터 프로그램을 명령어의 목록이 아닌 독립적인 단위 즉, '객체'들의 모임으로 파악하고자 하는 것이다. 예를 들자
today-studies.tistory.com
객체 지향 프로그래밍을 위해 사용하는 4가지 방법이 있다.
- 추상화 : 공통된 특징이나 기능들을 묶고, 내부 구조를 알지 않고도 이용할 수 있게 하는 것
- 캡슐화 : 데이터와 데이터를 다루는 방법을 묶어 함부로 데이터를 사용하지 못 하게 하는 것
- 상속 : 상위 객체의 특징을 하위 객체가 물려받는 것
- 다형성 : 한 객체가 여러 가지의 성질을 갖는 것
추상화와 캡슐화 또한 중요한 개념이지만 지금은 넘어가도록 하겠다.
추상화, 캡슐화는 상속과 다형성을 배우면 자연스럽게 알게 될 것이다.
상속은 무엇일까?
현실에서 부모의 자산을 자식이 물려받을 때 상속이라는 말을 자주 사용하는데,
자산이라는 단어를 특징(속성)이라는 단어로 바꾸면 객체 지향에 적용할 수 있다.
class 부모 { ... } class 자식 extends 부모 { ... }
자바에서는 extends 키워드를 통해 클래스 간의 상속을 구현할 수 있으며
자식 클래스는 부모 클래스의 내용(특징)을 전부 가져오게 된다.
여기서 동시에 다형성도 만족하게 된다.
부모 클래스가 동물이고 자식 클래스가 사람이라고 생각해보자. 사람이 동물을 상속받게 될텐데,
그렇다면 동물은 사람인가? 아니다.
그러면 사람은 동물인가? 맞다.
결론적으로 사람은 사람의 특징을 가지며 동물의 특징도 가지게 된다.
한 객체가 여러 성질을 가지는 것이다.
이런 다형성을 더욱 강력하게 활용할 수 있는 방법이 있는데
그것이 바로 자바의 인터페이스(interface)이다.
인터페이스는 특징은 가질 수 없고, 기능만 가진다.
움직인다라는 인터페이스가 있다면,
새나 곤충, 사람, 개, 물고기가 움직이는 법은 각각 다 다르다.
그렇다면 각각이 움직이는 법을 구현(implements)해주면 된다.
그리고 움직이라는 명령을 내리고 싶을 때, 움직일 대상만 정해주면 대상은 움직이게 된다.
대상이 새라면 날 것이고,
대상이 사람이라면 걸을 것이다.
즉, 기능만 있는 인터페이스를 활용하면 더 많은 대상에게, 더 자유로운 행동을 명령할 수 있다.
그래서 인터페이스라는 '역할'을 클래스가 '구현'하도록 해서
'역할'과 '구현'을 분리하여 다양한 대상에게 적용 가능하도록 유연하게 만들 수 있다.
이 글을 읽고나면 추상화와 캡슐화도 이해할 수 있을 것이다.
공통된 특징과 기능을 가진 클래스(추상화 된 클래스)가
인터페이스에게 명령을 받아 함수를 실행하게 되는 것(캡슐화)을 이해하게 된다면
비로소 객체 지향 프로그래밍을 할 수 있는 것이다.
즉, 사람에게 직접 명령을 내리지 않고 인터페이스를 통해 간접적으로 명령을 내림으로써
사람이 가진 특징이나 기능을 훼손하지 않아 추상화와 캡슐화를 달성할 수 있다.
'JAVA > [김영한 강사님] 스프링' 카테고리의 다른 글
싱글톤 컨테이너 (0) 2022.09.17 객체 지향 프로그래밍이란? (0) 2022.08.21 스프링 (0) 2022.08.21 - 추상화 : 공통된 특징이나 기능들을 묶고, 내부 구조를 알지 않고도 이용할 수 있게 하는 것