객체지향의 4가지 특징

2020-03-15

면접에서 객체지향의 4가지 특징을 설명해보라고 가끔 물어봅니다.

오늘은 그것에 대해서 포스팅해보겠습니다.


객체지향개발(Object Oriented Programming)의 4가지 특징

추상화, 캡슐화, 상속성, 다형성이 있습니다.

1. 추상화(Abstraction)

추상화는 객체들이 가진 공통의 특성들을 파악하고, 속성, 기능을 묶어 이름을 붙이는 것입니다.

그림 출처

그림을 보았을 때, 사람, 강아지, 고양이 등이 있을 때 각각을 우리는 객체(Object)라고 합니다.

이 객체들을 하나로 묶으려 할때, 동물(animal)이라는 추상적인 객체로 크게 정의할 수 있습니다.

이렇게 묶는 것을 추상화 라고합니다.

즉, 구체적인 사물들의 공통적 특징을 파악해서 하나의 집합으로 다루는 방법입니다.

2. 캡슐화(Encapsulation)

OOP의 장점은 프로그램을 유연하고 변경이 용이하게 만들기, 개발과 보수를 편하게 만들기, 직관적인 코드 분석등이 있습니다.

위의 장점들을 관통하는 객체 지향 프로그래밍의 중요한 특성은 응집도와 결합도입니다.

응집도(Cohesion)

클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.

결합도(Coupling)

어떤 기능을 실행하는 데 다른 클래스나 모듈들에 얼마나 의존적인지를 나타낸다.

캡슐화는 정보 은닉을 통해 높은 응집도, 낮은 결합도를 유지할 수 있도록 해주는 객체지향 설계 원리입니다.

정보 은닉 : 필요없는 정보는 외부에서 접근하지 못하도록 제한하는것 (private)
정보은닉의 필요성 : SW는 결합이 많을수록 문제가 많이 발생한다.
한 클래스가 변경이 발생하면 변경된 클래스의 비밀에 의존하는
다른 클래스들도 변경해야 할 가능성이 커진다는 뜻이다.
https://gmlwjd9405.github.io/2018/07/05/oop-features.html

데이터를 절대로 외부에서 직접 접근을 하면 안되고 오로지 함수를 통해서만 접근해야하는데 이를 가능하게 해주는 것이 바로 캡슐화입니다.

3. 상속성, 재사용(Inheritance)

상위 개념의 특징을 하위 개념이 물려받는 것

상위 클래스를 하위 클래스에서 상속 받게 되면 상위 클래스의 멤버변수나 메소드를 그대로 물려 받을 수 있습니다.

상속이 있기 때문에 코드를 재활용할 수 있고 그렇기 때문에 생산성이 높고 유지보수 하기가 좋습니다.

4. 다형성(Polymorphism)

부모클레스에서 물려받은 가상 함수를 자식 클래스 내에서 오버라이딩 되어 사용되는 것

다형성이 상속과 연계되어 동작하면 매우 강력한 힘을 발휘합니다.

다형성을 사용하는 경우에는 구체적으로 현재 어떤 클래스 객체가 참조되는지와 무관하게 프로그래밍을 할 수 있습니다.

일반화 관계에 있을 때 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있기 때문에

새로운 자식 클래스가 추가되더라도 코드는 영향을 받지 않습니다.

다형성의 예를 간단히 들어보자면,

1번학생이 먼지털이로 청소를, 2번학생이 걸레질로 청소를, 3번학생이 창문닦이로 청소를 한다했을 때

선생님이 청소 시작! 이라고 말한다면 학생들은 청소를 시작할 것입니다.

그런데 여기서 다형성이 없다면? 먼지털이 청소시작! 걸레질 청소시작! 창문닦이 청소시작! 처럼 여러번을 말해줘야 합니다.