객체 지향 프로그래밍(OOP)과 4특징

2023. 10. 26. 19:37CS, 기술면접

객체 지향 프로그래밍

 

객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 객체를 우리가 보고 느끼고 인지할 수 있는 그 모든 으로 보고 이러한 객체는 프로그래밍의 가장 기본적인 단위이자 시작점이며, 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미한다.

객체 지향 프로그래밍에서는 이와 같은 각각의 객체를 추상화시켜 속성(state) 기능(behavior)으로 분류한 후에 이것을 다시 각각 변수(variable) 함수(function)로 정의한다.

 

객체 지향 프로그래밍의 장점

 

1. 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다

2. 코드의 변경을 최소화하고 유지보수를 하는 데 유리

3. 코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현

4. 인간 친화적이고 직관적인 코드를 작성하기에 용이

 

객체 지향 프로그래밍 4가지 특징

 

객체 지향 프로그래밍의 4가지 특징은 각각 추상화, 상속, 다형성, 캡슐화다.

 

추상화

 

중요한 부분을 강조하기 위해 불필요한 세부 사항들은 제거하고 가장 본질적이고 공통적인 부분만을 추출하여 표현하는 것

 

추상화 - 자동차, 오토바이의 공통적인 부분 추출

 

 

상속

 

기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것

 

상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있도록한다.

 

상속받지 않는 구조

 

상속 구조

 

 

추상화(추상클래스)와 상속에 대한 차이는 추상 클래스는 인스턴스를 만들 수 없으며, 그냥 클래스는 인스턴스를 만들 수 있다. 따라서 상속할 때 추상클래스를 상속받는 것은 구체적으로 형태(실체)를 만들도록 추상클래스가 아닌 상속 받은 클래스만 인스턴스를 만들도록 하는 것이다.

 

즉 추상화(추상클래스)는 그저 하위클래스를 만들기 위한 틀, 설계도이며, 상속은 재사용, 재활용의 목적이다.

 

다형성

 

이제 객체 지향 프로그래밍의 꽃이라 할 수 있는 다형성에 대해 간략히 살펴보도록 하겠습니다. 다형성(多形性)이란 한자 이름 그대로 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미한다.

 

어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할수 있는 객체 지향의 특성을 의미한다. 메서드 오버라이딩 메서드 오버로딩(method overloading)으로 할 수있다.

 

 메서드 오버라이딩을 사용하면 같은 이름의 메서드를 각각의 클래스의 맥락에 맞게 재정의하여 사용할 수 있다. 즉, 같은 이름의 메서드가 상황에 따라 다른 역할을 수행하는 것

 

도형을 상속받은 클래스들의 Draw 함수, 각각 다른 동작을 한다.

 

 

여기서 다른 행동을 보이는 함수 즉 Draw는 virtual로 선언하여 하위에서 오버라이딩해 다른 동작을 한다. 여기서 가상함수 테이블에 대한 내용은 다음에 언급하도록 한다.

 

캡슐화

 

캡슐화란 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것을 말합니다.

 

즉 서로 관련 있는 데이터와 이를 처리할 수 있는 기능들을 한곳에 모아 관리하는 것이다. 다음과 같은 특징이 있다.

  • 데이터 보호(data protection) – 외부로부터 클래스에 정의된 속성과 기능들을 보호
  • 데이터 은닉(data hiding) – 내부의 동작을 감추고 외부에는 필요한 부분만 노출

 

 

우리가 아플 때 한 번씩 먹게 되는 캡슐 약을 떠올려보면, 우리는 캡슐 안에 어떤 색의 내용물이 있는지, 또 어떤 성분의 약이 들어있는지 알 수 없습니다. 또한, 그 안의 내용물은 캡슐을 통해서 외부로부터 오염되지 않고 안전하게 보호될 수 있습니다.

 

즉, 외부로부터 클래스에 정의된 속성과 기능들을 보호하고, 필요한부분만 외부로 노출될 수 있도록 하여 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 목적이 있다.