객체지향의 4가지 특성

sith-call.dev·2022년 1월 21일
0

객체지향

목록 보기
2/3

0. 들어가기 앞서

객체지향에는 4가지 특성이 있다. 이 특성은 도구적 특성으로서 객체지향이란 관점으로 만든 4개의 도구라고 생각할 수 있다. 그래서 이 각각의 도구를 하나씩 알아본다.

1. 캡슐화(Encapsulation) - 정보은닉

왜 캡슐화가 필요한 것일까? 오로지 나의 지식만으로 추론해내는 것은 비효율적임을 알고 있다. 책에서 보길 정보은닉을 위함이라고 나와 있다. 그리하여 다시 묻는다. 정보은닉은 왜 필요한 것인가?
또 다시 인터넷의 힘을 빌린다. 객체지향 패러다임에서는 데이터를 중심으로 설계를 하기 때문에 이 데이터를 보호할 필요가 있었다고 한다. 또는 해당 객체의 사용자는 알 필요 없는 내용을 숨김으로써 상호작용을 단순화시킬 수 있다고 한다. 이를 통해 객체의 응집성 또한 높일 수 있다고 한다.
주관적인 의견으로는 맥락에 따라서 필요 없는 것은 항상 숨겨져야 한다는 원칙 같다. 반대로 말하자면, 꼭 필요 있는 것만을 노출시킨다는 원칙인 셈이다.

2. 상속(Inheritance) - 재사용성, 확장성

나는 이 특성이 클래스 또는 객체 간의 관계를 나타내는 특성이라고 생각한다. 즉, 클래스끼리 관계를 맺을 때 지켜야 하는 원칙이라고 생각한다.
단순하게 설명하자면, 상위 클래스는 보다 일반적인 의미를 가져야 하고 하위 클래스로 갈수록 구체적인 의미를 갖게 된다는 것이다. 그래서 상속이란 뜻은 집합적 관점에서 바라봐야 한다. 상위 클래스는 하위 클래스를 의미적으로 포함하고 있다. 그러나 코드의 양은 하위 클래스로 갈수록 많아진다. 계속해서 의미가 추가되어 구체적으로 변하기 때문이다.

3. 추상화(Abstract) - 모델링

추상화에는 한 가지 또 다른 키워드가 있다. 바로 '맥락'이다. 이것을 소프트웨어 업계의 용어로 말하자면 어플리케이션 경계라고 한다.
현상의 해석은 주관적이며 다양하기 마련이다. 그래서 그것을 곧이 곧대로 사용한다면 무분별하고 불필요한 해석이 많아진다. 그래서 주어진 '맥락'에 따라서 필요한 부분만 추출하는 행위를 추상화라고 한다.
어플리케이션을 설계할 때도 무수히 많은 객체와 무수히 많은 속성, 행위를 보게 될 것이다. 이때 어플리케이션 경계에 따라서 필요한 속성, 행위, 객체만을 남긴다. 그리고 이것들의 공통점을 기준으로 객체를 분류한 것을 클래스라고 한다.

4. 다형성(Polymorphism) - 사용 편의성

나는 이것 또한 객체 또는 클래스 간의 관계에 대한 특성이라고 생각한다.
다형성을 이용하면, 하나의 메세지를 다양하게 해석할 수 있다. 이때 메세지란 객체 간의 소통 수단이라고 생각하면 된다.
추가적으로 사견을 붙이자면, 다형성을 이용하면 하나의 메세지를 맥락에 따라서 해석할 수 있게 되는 것이다.
이때 맥락은 언제나 변할 수 있는 것이며, 다형성은 이러한 변화에 효과적으로 대응할 수 있는 수단이 되는 것이다.

이 글은 내가 깨달음을 얻을 때마다 업데이트할 예정이다.
4가지 특성은 '캡!상추다'로 쉽게 외우자.

profile
Try again, Fail again, Fail better

0개의 댓글