본문 바로가기
면접 준비

[면접 준비] OOP란 무엇인가?

by 스테디코디스트 2023. 7. 29.
반응형

1.OOP

- OOP(Object Oriented Programming)란 객체 지향 프로그래밍을 뜻한다.

- 문제를 여러 개의 객체 단위로 나눠 작업하는 방식을 사용한다.

- 객체들이 서로 유기적으로 상호작용하는 특징이 있다.

- 대표적으로 Java와 C#이 있다.

 

cf) 객체

- 데이터의 분산을 막기 위해 데이터와 기능을 하나로 묶은 그룹

- ex) 컴퓨터(객체) -> 데이터(본체, 모니터, 키보드) + 기능(화면, 소리, 입력, 출력)

 

2. OOP의 장점

1) 코드 재사용성 증가

- 상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있음.

2) 생산성 향상

- 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있음.

3) 자연적인 모델링

- 우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있음.

4) 유지보수의 우수성

- 프로그램 추가, 수정을 하더라도 캡슐화를 통해 주변에 영향을 적게 받기 때문에 유지보수가 쉬워서 매우 경제적임.

 

3. OOP의 단점

1) 개발속도 저하

- 객체가 처리하려는 것에 대한 정확한 이해가 필요하므로 설계단계부터 많은 시간이 소모됨.

2) 실행속도가 느림

- 객체지향언어는 대체적으로 실행속도가 느림.

3) 코딩 난이도 상승

- 다중 상속이 지원되는 C++같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있음.

 

4.OOP 특징

[1] 캡슐화(Encapsulation)

- 캡슐화란 데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법이다.

- 변수를 private로 선언하여 데이터를 보호하고, 보호된 변수는 getter나 setter등 메서드를 통해서만 간접적으로 접근을 허용한다.

- 불필요한 정보를 감추어 정보를 은닉할 수 있다는 특징이 있다.(캡슐화와 정보은닉이 동일 개념은 아님!)

 

[2] 추상화(Abstraction)

- 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말한다.

- 실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통 특성을 파악해 필요없는 특성을 제거하는 과정을 말한다.

- 객체들은 실제 그 모습이지만, 클래스는 객체들이 어떤 특징들이 있어야 한다고 정의하는 추상화된 개념이다.

- 즉, 추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이다.

 

[3] 상속(Inheritance)

- 상속은 기존 상위 클래스의 기능을 가져와 재사용할 수 있으면서 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있게 한다.

- 부모가 자식에게 특징들을 물려주는 것과 같고, OOP에서 이를 부모 클래스, 자식 클래스라고 표현한다.

- 상속이 필요한 이유는 코드의 중복을 없애 개발과 유지 보수 단계에서 비용을 절감하기 위함이다.

- 상속관계를 맺으면 자식 객체를 생성할 때 부모 클래스의 속성들을 자동으로 물려받기 때문에 자식 클래스에서 또 정의할 필요가 없다.

 

[4] 다형성(Polymorphism)

- 다형성이란 상속과 연관있는 개념으로, 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러형태(객체)로 재구성되는 것을 말한다.

- 쉽게 말하면, 한 부모의 밑에서 태어난 자식들이 조금씩 다르다는 것과 같다.

- 오버로드(Overload)와 오버라이드(Override)가 다형성의 대표적인 예시라고 할 수 있고, 이것을 구현하는 걸 오버로딩(Overloading)과 오버라이딩(Overriding)이라고 한다.

- 다형성을 사용하면 같은 이름의 속성을 유지하므로 속성을 사용하기 위한 인터페이스를 유지하고, 메서드 이름을 낭비하지 않을 수 있다.

- API가 많아질수록 복잡성은 증가하기 때문에 이를 줄여주는 다형성은 유용하며, 코드의 재사용성을 늘려주기 때문에 유지보수 또한 용이하도록 도와준다.

 

cf) 오버로딩 vs 오버라이딩

1) 오버로딩(Overloading)

- 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되면 그 결과물도 다르게 구현하는 것을 말한다.

- 즉, 메서드끼리 이름이 같지만 매개변수의 갯수나 데이터 타입이 다르게 구현할 수 있다.

2) 오버라이딩(Overriding)

- 하위 클래스(자식)가 상위 클래스(부모)에서 만들어진 메서드를 자신의 입맛대로 다시 재창조해서 사용하는 것을 말한다.

 

cf) API

- API는 Applicatino Programming Interface의 약자로 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다.

- 즉, 애플리케이션간 통신하는 방법을 정의하는 것을 말한다.

 

[5] OOP 특징 정리

- 결국 OOP는 위의 4가지 특성들을 통해 어떤 대상을 추상화하여 공통점을 찾고, 그것을 캡슐화해 한 군데에 모아 객체를 만들고, 새로운 객체가 상속받아 재사용이 가능하게 만들어 준다. 또한 상속받은 객체는 다형성을 통해 기능을 수정하거나 추가하는 방식으로 재사용할 수 있다.


<면접 예시 답안>

Q. OOP에 대해 설명해 보시겠어요?

A. OOP란 객체 지향 프로그래밍이라는 뜻으로 문제를 여러개의 객체로 나누어 작업하는 방식을 의미합니다. OOP의 특징으로는 추상화, 캡슐화, 상속, 다형성 이렇게 4가지가 있는데 먼저 추상화는 어떤 대상의 공통적인 특성을 추출하여 정의하는 것을 의미합니다. 그 다음으로 캡슐화는 데이터를 외부로부터 알 수 없게 보호해 주는 기능을 합니다. 상속은 부모가 자식에게 물려주듯이 부모클래스의 특성을 자식클래스에게 물려주어 코드의 중복을 제거하는 기능을 합니다. 마지막으로 다형성이란 객체의 기능을 다른 여러형태로 재구성 할 수 있는 것을 의미하고 그 예시로는 메서드의 이름이 같지만 매개변수나 데이터 타입을 다르게 정의할 수 있는 오버로딩과 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의를 통해 사용할 수 있는 오버라이딩이 대표적입니다. 이렇게 OOP의 4가지 특성을 통해 코드의 재사용성 및 생산성을 높이고, 유지보수를 쉽게 만들 수 있습니다.


<참고 자료>

https://velog.io/@gillog/OOP%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D