객체지향 프로그래밍(Object-Oriented Programming, OOP)
컴퓨터 프로그램을 명령어의 목록으로 보기보다
여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것
어떤 프로그래밍 방식, 방법론, 패러다임 중 하나
실제 어느 사물에 대입하여 프로그래밍 하는 것이라고도 하고,
반죽과 팥이 클래스란 붕어빵 틀에 찍혀서 / 객체인 붕어빵이 나오는 것
클래스라는 모양틀에 흙을 넣어 구우면 / 모양과 용도가 뚜렷한 객체인 벽돌이 만들어짐
왜 만들어졌나?
더 쉽게, 더 잘하기 위해서
객체(Object)
데이터와 기능이 클래스로 '캡슐화'된 컴퓨터 자원의 묶음
📝 참고
📦 은닉성
이게 객체지향의 특성 중 하나인 '은닉성'이에요. 우리가 TV 속을 뜯어보지 않아도 리모콘으로 필요한 조작을 다 할 수 있는 것처럼 내부 구조는 private으로 감춰놓고 외부에서 조작할 수 있는 명령어만 public으로 공개해놓는거죠. 이로써 바깥의 간섭으로 발생하는 오류를 방지할 수 있고 남이 만든 클래스의 객체들도 일일이 뜯어볼 필요 없이 제공되는 기능들을 그대로 사용할 수 있는거죠.
👩👦 상속
여기서 객체지향의 '상속'을 사용할 수 있어요. '교실청소팀'을 상위, 부모 클래스로 해서 여기에 더 필요한 것들을 추가한 '과학실청소팀'이란 자식 클래스를 만드는거죠. 이렇게 '교실청소팀'을 상속받는다고 정의하면 교실청소팀에서 protected나 public으로 지정한 변수들과 메소드들은 그대로 물려받아요. 여기에 '실험기구닦이'란 변수, 그리고 메소드마다 얘한테 시킬것만 추가하면 되는거죠.
👻 추상 클래스
다만 이 클래스는 '추상적'을 뜻하는 abstract를 붙어요. 이 추상클래스로는 객체를 만들 수가 없어요. 누구한테 '너는 교실 청소당번이야'라고만 할 수 없단 얘기에요. 개라 불리는 동물, 고양이라 불리는 동물은 있지만 어떤 생물을 '이건 포유류라는 동물이야' 하지는 않죠. 직업이 뭐냐고 물을 때 '전문직'이라고 답하지는 않잖아요. 특정 개체를 이걸로 부르기엔 너무 추상적란거에요. 마찬가지로 이 '교실 청소당번'은 그 자체로서가 아니라 이를 상속한 자식 클래스로만 객체가 생성돼요. 자식 클래스들의 공통분모 역할만을 위한 클래스인거죠.
🍲 다형성
이렇게 부모 클래스에서 정의된 메소드의 작업이 자식 클래스에서 다른걸로 override, 대체될 수 있는 걸 객체지향의 '다형성'이라고 해요. 중국집에서 '탕수육 주세요' 하면 일반 탕수육이 나오지만 이를 상속한 사천식 중국집에서는 '탕수육 주세요'가 override 돼서 시뻘건 탕수육이 나오는거죠.
🕹 인터페이스
어, 그러면 인터페이스는 쓸모없는거 아니냐구요? 상속은 트리구조의 상하관계가 뚜렷하기 때문에 한 자식이 두 부모로부터 상속받는게 언어마다 불가능하거나, 부작용들이 있어요. 반면 인터페이스는 이로부터 자유로워요. 박쥐와 날다람쥐는 포유류란 부모에게서, 날치는 어류란 부모에게서 상속받지만 '난다'는 기능을 인터페이스로 장착해서 대다수 조류와 곤충처럼 '날짐승'이란 카테고리에 들어갈 수 있는거죠. 우리 프로그래머들은 'IT전문직'이란 부모 클래스에서 상속받지만 대형차 면허, 한식 자격증, 공인중개사 자격증도 인터페이스로 딸 수 있는거고요. 상속은 물려받는 것, 인터페이스는 장착하는 거라고 생각하시면 적당할거에요.
'Programming' 카테고리의 다른 글
Colab 한글 폰트 깨짐 문제 (0) | 2023.05.31 |
---|---|
VSCode 주석 단축키(Ctrl + /) 안될 때 (0) | 2023.05.10 |
VSCode Debug 시 Command 'cmd' not found 에러 (0) | 2023.05.09 |
[Python] 정규표현식 re 모듈 (0) | 2022.04.28 |
C, C++, C# 특징과 차이점 (0) | 2021.11.11 |