데브팜
[Design Pattern] 디자인패턴, 객체지향의 원리 본문
디자인 패턴을 공부해보기 전에, 우선 그 근본이 되는
객체지향의 원리, 그리고 원칙들에 대해서 알아보겠습니다.
<객체지향, 왜 알아야 하나요?>
디자인 패턴을 이용하여 본질적으로 좋은 코드를 작성하기 위해선
이의 근본이 되는 기준과 의미를 살펴볼 필요가 있습니다.
디자인 패턴이 발달한 배경에는
객체지향 프로그래밍이 지향하는 방향과
좋은 프로그램은 무엇인지에 대한 고민이 숨어 있는데요.
디자인 패턴을 공부하다보면
그 패턴이 등장한 이유와 등장하게 된 원인과 배경에 대해서 알게 될 것입니다.
이는 어떤 상황에서 쓰였는지를 아는 것이 그 패턴을 이해하는 데에 큰 도움이 될 것입니다.
객체지향 원리와 원칙은 이렇게 디자인 패턴이 생겨난 원인과 배경을 설명합니다.
또한 좋은 디자인과 나쁜 디자인의 판단 기준이 되기도 합니다.
진정한 코딩 고수로 향하는 길에 필요한 베이스, 밑거름이 될 것입니다!
<객체지향의 원리>
오늘은 너무나도 유명한 객체지향의 원리 네 가지를 소개하겠습니다.
1. 추상화(Abstraction)
2. 캡슐화(Encapsulation)
3. 일반화(Generalization)
4. 다형성(Polymorphism)
객체지향 프로그래밍은 현실 세계의 일을 효율적으로 표현하기 위해서
프로그램을 ‘객체’들의 모임과 관계로 표현합니다.
그렇기 때문에, 그 세계를 살아가는 우리는 그 원리를 직관적으로 이해할 수 있습니다
<추상화>
추상화: 구체적인 여러 대상의 비슷한 속성을 뽑아 하나의 개념으로 다루는 방법
생명체의 활동은 원자의 운동과 분자의 화학적 결함으로 해석하고 있습니다.
하지만 생명과학에서 과학자들은 생명체의 활동을
원자, 분자의 결합 대신 뇌, 심장, 근육 등의 추상화 된 개념을 이용해 설명하고 있습니다.
프로그래머의 입장에서 프로그래밍을 하기 위해서
컴퓨터 내부 회로의 전자간 결합이 어떻게 형성되는지 전혀 알 필요가 없습니다.
대신 우리는 트랜지스터, CPU, 컴퓨터 등으로 그 추상화의 크기를 키우고
개념의 숫자를 줄여서, 원하는 부분에 더 집중할 수 있습니다.
이것이 바로 추상화의 장점이고 가장 중요한 핵심입니다.
<캡슐화>
캡슐화: 알 필요가 없는 정보를 숨기는 것 (=정보 은닉(Information Hiding))
캡슐화 원리는 일상생활의 감기약에서도 찾아볼 수 있습니다.
우리는 감기약. 이라는 단어를 통해 먹으면 몸이 나을 수 있다는 것을 알고 있습니다.
하지만, 그 안에 어떤 성분이 어떻게 이루어져 있는지는 열어보지 않는 이상 알 수 없고, 또한 알 필요도 없습니다.
이처럼 캡슐화란 정보 은닉을 통해 알필요가 없는 정보를 숨기는 것을 말합니다.
추가로, '은닉'이라는 단어에 대해서 알아보겠습니다.
결과적으로 캡슐화는 필요 없는 정보를 숨기는 것,
즉 정보 은닉을 통해서 낮은 결합도를 유지할 수 있도록 해줍니다.
결합도가 낮다는 것은, 서로에 대해서 자세히 알지 못한다는 것이고,
자세히 알지 못하기 때문에 언제든지 바뀔 수 있는 유연성을 가질 수 있습니다.
실제로 개발을 해본 분들이라면, 요구사항 변경에 대한 대처가 얼마나 중요한지 알 수 있겠죠? (요구사항이 변하는 건 당연하니까요!)
<일반화>
사과, 배, 포도, 바나나. 이들의 공통점은 무엇일까요?
바로 과일이라는 것이지요.
아우디, 벤츠, 포르쉐. 이들의 공통점은 자동차 브랜드라는 것입니다.
누구나 이해할 수 있는 성질입니다.
이렇게 여러 개체들이 가진 비슷한 특성을 드러내어 하나의 개념으로 만드는 과정을 일반화라고 합니다.
언뜻 보면 공통된 특성을 뽑아낸다는 점이 추상화와 비슷한 것 같습니다.
그러나 일반화는 추상화와 조금은 다른 면이 있습니다.
트랜지스터를 이용해서 복잡한 논리 회로를 만들었습니다.
그렇지만 트랜지스터는 논리 회로라고 말할 수 없습니다.
이것이 추상화의 개념입니다.
시장에 나가서 맛있는 사과를 사서 먹었습니다.
사과는 과일이라고 할 수 있습니다. 이것이 일반화의 개념입니다.
IS A KIND OF 관계를 가진 두 객체를 ‘일반화 관계’로 이야기할 수 있습니다.
Apple is a kind of Fruit 라는 문장은 자연스럽습니다. 즉, 일반화 관계입니다.
일반화는 또 다른 캡슐화로써 설명할 수 있습니다.
사람이 자동차를 탄다고 생각해봅시다. 그 자동차가 아우디인지, 벤츠인지, BMW인지 구체적인 종류에 상관없이, 자동차는 동일하게 작동합니다. 자동차를 타는 사람은 벤츠를 타다가 BMW를 타도 문제없이 운전할 수 있습니다.
이렇게 구체적인 대상을 일반화된 개념으로 외부로부터 감추기 때문에, 일반화를 캡슐화의 일종이라고 할 수 있는 것입니다.
<다형성>
예시를 들어보겠습니다.
애완 동물이 이야기를 할 때, 제각기 다른 방식으로 이야기합니다.
고양이는 ‘야옹’, 강아지는 ‘멍멍’, 참새는 ‘짹짹’이라고 말할 것입니다.
이렇게 같은 연산을 실행했을 때 각자의 방식으로 동작하는 능력이 바로 다형성입니다.
다형성은 다른 객체지향 원리와 궁합이 잘 맞습니다.
위의 설명한 예시처럼, 고양이, 강아지, 참새를 일반화한 ‘애완 동물’은 모두 짖을 수 있습니다. 그러나 그 짖는 방식은 모두 다르기 때문에, 같은 행동을 시켜도 다르게 동작해야 할 필요성이 있습니다.
오늘은 객체지향의 원리에 대해서 알아봤습니다.
잘 이해가 되길 바라면서... 안녕~!!
'Design Pattern' 카테고리의 다른 글
[Design Pattern] SOLID 원칙 (0) | 2017.06.14 |
---|---|
[Design Pattern] 디자인 패턴이 필요한 이유 (0) | 2017.06.02 |