1. 객체 지향 프로그래밍(Object Oriented Programming)
프로그램 설계방법론이자 개념의 일종.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다.
이 개념을 쉽게 이해하기 위해서 객체와 클래스에 대해서 알아야 하는데 내가 좋아하는 축구를 예로 들어 설명을 해보겠다. 축구를 하다 보면 어떤 축구화를 신을지 고민을 하게 된다. 내가 가지고 있는 축구화는 아디다스 19.1 X tf 라는 축구화이다.
이 축구화는 아디다스 축구화 중 X 시리즈이다. 축구화를 뭐 쓰냐고 물어본다면 아디다스, 나이키, 푸마 등 여러 브랜드를 가지고 대답하는 경우를 생각해보면 어떤 모델을 신고 있든지 상관 없이 좀 더 포괄적인 개념으로 얘기한다는 것이다.
포인트는 아디다스 X 시리즈뿐만 아니라 아디다스의 다른 축구화도 아디다스(상위 개념)의 특징을 모두 가지고 있다. 아디다스의 포괄적인 개념은 브랜드의 명칭이라고 할 수 있다.
이런식으로 생각하게 된다면 계속해서 상위 개념을 정의해 나갈 수 있다.
아디다스 19.1 TF -> 아디다스 축구화 -> 아디다스 -> 브랜드 -> ...
여기서 아디다스 19.1 TF, 아디다스, 브랜드와 같은 개념들을 클래스(Class)라고 부른다.
그렇다면 객체는 어떻게 설명할 수 있을까? 나와 내 친구가 똑같은 19.1 TF 축구화를 가지고 있어도 19.1 TF라는 모델명과 그 안에 들어 있는 스펙이 같을 뿐이지 실제로는 다른 아디다스 축구화이다. 색깔과 사이즈가 다를 수 있고 특히, 제품 번호가 다를 것이다.
즉, 아디다스에서 아디다스 19.1 TF를 만들어 지고 그렇게 생산된 제품 하나 하나가 객체라고 할 수 있다.
정리를 하자면 클래스를 사용하여 생성한 실제 물건이라고 할 수 있다.
2. 객제 지향 프로그래밍의 특징
2.1 추상화
위에서 설명한 것처럼 상위 개념을 만들어 나가는 행위 자체를 추상화라고 한다.
- 공통의 속성이나 기능을 묶어 이름을 붙이는 것
- 한 가지의 예시를 더 들면 물고기, 코끼리, 호랑이라는 객체를 하나로 묶으려 한다면, 동물이라는 클래스를 만들 수 있고, 이 동물은 생물이라고 묶을 수 있을 것이다.
2.2 상속
예시에서 볼 수 있듯이 하위 개념들은 상위 개념이 가지고 있는 모든 속성을 그대로 물려받는데, 이 과정을 상속이라고 한다.
객체 지향 프로그래밍에서는 부모 클래스, 자식 클래스라고 표현을 한다.
축구화를 다시 예시로 든다면 아디다스 축구화에는 여러 속성들이 있을텐데 그 속성들을 아디다스 19.1 TF 클래스에 물려주게 된다.
- 상속이 필요한 이유는 코드의 중복을 없애기 위함이다.
2.3 캡슐화
캡슐화는 어떠한 클래스를 사용할 때 내부 동작이 어떻게 돌아가는지 모르더라도 사용법만 알면 쓸 수 있또록 클래스 내부를 감추는 기법이다. 클래스를 캡슐화 함으로써 클래스를 사용하는 쪽에서는 머리 아프게 해당 클래스의 내부 로직을 파악할 필요가 없어지고 변수나 메소드를 원하는 대로 감출 수 있기 때문에 보안도 챙기는 것이 가능하다. 이렇게 데이터를 감추는 것을 정보 은닉이라고 부른다.
2.4 다형성
다형성은 어떤 하나의 변수명이나 함수명이 상황에 따라서 다르게 해석될 수 있는 것을 의미한다. 다형성은 어떤 한가지 기능을 의미하는 것이 아니라 개념이기 때문에 여러가지 방법으로 표현할 수 있다. 롤이라는 게임을 예시로 들어 보겠다
- 롤에는 여러 가지 챔피언이 있다 (Class)
- 롤의 챔피언들은(객체) 각각의 다른 궁극기를 가지고 있다.
- 궁극기를 Ultra 라고 한다면 A 챔피언, B 챔피언, C 챔피언에게 Ultra 라는 같은 궁극기지만 다른 기능을 하게 된다.
'Fundamental' 카테고리의 다른 글
DNS(Domain Name Service) (0) | 2020.02.12 |
---|---|
OSI 7 계층(layers) (0) | 2020.02.10 |
오버로딩(Overloading) vs 오버라이딩(Overriding) (0) | 2020.02.04 |
프로세스(Process) vs 스레드(Thread) (0) | 2020.01.30 |