객체 지향 프로그래밍(Object-Oriented Programming; OOP)
: 실제 세계가 객체(object)들로 구성되어 있는 것과 비슷하게
소프트웨어도 객체 단위로 작성하는 방법
실제 세계에 객체들은 사람, 동물, 건물, 자동차, 시계, 토스터, 세탁기 등의 많은 객체가 존재한다.
이 객체 지향 프로그래밍은 다양한 특징을 가진다.
영어를 예로 들어 보면
추상적인 단어와 물질적인 단어가 나누어져 있다.
추상적인 단어 : 존재하지 않는 것
물질적인 단어 : 존재하는 것(s) -> 셀 수 있는 명사
실제로 침대, 의자, 책상은 우리가 본 적이 있지만
'가구'를 본 적이 있을까?
이렇게 물리적인 침대, 의자, 책상을
하나로 두루뭉실하게 부르기 위해
물질적인 것들을 추상화 한 가구를 부모라고 한다.
또한 물질적인 침대, 의자, 책상을 부를 수 있는 이름이
가구이기도 하고 침대, 의자, 책상이기도 하여
하나의 대상을 여러가지 이름으로 부를 수 있는
다형성의 특징을 가진다.
실제로 존재할 수 있는 가능성이 있는 것을 객체(object)라고 한다.
즉, 메모리에 뜰 수 있는 가능성이 있는 데이터를 말한다.
이때 추상적 object인 가구를 추상 클래스라고 하며,
침대, 의자, 책상과 같은 것을 클래스라고 한다.
그리고 실제로 나타난, 실제 존재하고 있는 object를 인스턴스(instance)라고 한다.
즉, 메모리에 뜬 데이터를 말한다.
이때 인스턴스가 뜬 공간은 heap이고,
클래스는 설계도이다.
1. 임꺽정은 장보고에 질문을 한다.
2. 장보고는 임꺽정에게 답변을 한다.
3. 임꺽정은 장보고에게 추궁한다.
4. 장보고는 끝까지 잡아뗀다.
라는 프로그램이 있다.
이때 임꺽정을 홍길동으로 변환하려면
일일이 내용에서 임꺽정을 찾아 직접 홍길동으로 바꿔주어야 한다.
이 불편함을 덜기 위해 이 프로그램을 추상화시켜보자.
죄인, 재판관이라는 추상 클래스 아래
장보고와 임꺽정이 자신들의 부모 클래스를 상속받을 수 있다.
임꺽정을 홍길동으로 바꾸고 싶을 땐
임꺽정의 상속을 끊고 홍길동을 만들어 연결만 해주면 된다.
그러면 프로그램은 이렇게 바뀔 것이다.
1. 재판관은 죄인에게 질문을 한다.
2. 죄인은 재판관에게 답변을 한다.
3. 재판관은 죄인에게 추궁을 한다.
4. 죄인은 끝까지 잡아뗀다.
프로그래밍을 할 때는 추상화(상속)해서 코드를 짜는 게 좋다.
* 상속 쉽게 이해하기 위한 예시 *
의자, 책상, 침대는 가구를 상속하고 있고,
나, 너, 우리는 인간을 상속하고 있다.
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9