학습 기록 블로그

객체 지향 프로그래밍이란 뭘까? 본문

CS

객체 지향 프로그래밍이란 뭘까?

오직노력 2023. 1. 29. 04:53

신입 개발자 면접 단골질문이라고 하는 객체지향 프로그래밍 (OOP)에 대해서 간단하게 정리해보려고 합니다.

 

OOP란 무엇인가??

OOP는 Object Oriented Programming의 줄임말입니다.

각각 객체(Object)/ 지향(Oriented)/ 프로그래밍(Programming)

 

객체 지향 프로그래밍이란 기존의 컴퓨터 중심적 패러다임과는 다른 인간 중심적 프로그래밍 패러다임입니다.

현실 세계의 사물을 객체라고 보고 그 객체로부터  개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는 것입니다.

 

이것을 추상화라고 합니다.

 

답변용 정리

프로그래밍에서 필요한 데이터를 추상화시켜서 상태(멤버 변수)와 동작(메서드)을 가진 객체로 만들고,

그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 기법입니다.

 

왜 객체지향을 사용할까?

현재 개발시장에서 객체지향을 차용한 언어는 매우 다양합니다.

그렇다면 객체지향 언어가 개발자들에게 어떤 이점이 있기에 이렇게 널리 사용되는 걸까요?

 

우선 객체지향은 앞선 절차지향의 후발주자입니다. 절차지향에서의 단점과 개발자들의 니즈를 개선하여 출시했기 때문에

개발 편의성면에서 많은 이점을 가집니다. 특히 객체지향은 생산성과 유지보수에 초점을 두고 있고, 덕분에 객체지향 언어를 사용하면 비교적 쉽고 빠르게 개발을 할 수 있습니다.

 

장점

1. 코드 재사용성 증가

모듈화 된 객체를 기반으로 코드가 작성되기 때문에, 해당 객체의 특징을 비슷한 다른 로직에 적용해서 사용할 수 있고,

다른 개발자가 이미 구현해 둔 객체를 가져와서 사용할 수 있다.

 

2. 간편한 유지보수

객체를 수정할 경우, 해당 객체를 사용하는 모든 로직에 일괄적으로 적용되기 때문에, 중복 코드에 대한 관리가 편해집니다. 혹은 객체나 동작이 변경될 경우, 해당 객체나 동작과 연관된 객체만을 찾아 수정해 주면 됩니다.

 

3. 큰 규모의 프로그래밍에 유리

객체, 모듈 단위로 구분되는 특징으로 인해 업무 분담이 쉽고, 각 모듈의 연관성을 도식하기 용이합니다.

 

단점

1. 비교적 느린 속도

절차지향과 달리 객체지향은 각 객체의 의존 관계로 인해 대체적으로 속도가 느립니다.

 

2. 높은 설계역량 요구

모듈 단위의 상호작용으로 이루어진 방식은, 모듈의 정확한 명세와 상호 간의 연관성이 얼마나 짜임새 있게 설계되었는지가 중요합니다. 잘 못 설계된 객체나 연관성은 라자냐 코드로 변하기 쉽습니다. 

 

3. 코드의 잠재적인 복잡성

높은 수준의 설계역량 요구와 더불어 추상 객체, 상속, 인터페이스 등의 복잡한 개념과 그 활용은 코드의 구조를 파악하기 어렵게 만듭니다.

 

객체지향의 특성

1. 추상화

객체의 관련 속성만 표시하고, 불필요한 정보는 숨겨 인터페이스와 구현을 분리하는 것입니다.

 

2. 캡슐화

연관된 목적을 가지는 변수와 함수를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 은닉하는 것입니다.

 

3. 상속화

기존 클래스를 재사용하는 것으로 상위클래스를 하위클래스에서 물려받게 되면 상위클래스의 멤버변수나 메서드를 그대로 물려받아 사용할 수 있게 됩니다.

 

4. 다형성

간단하게 표현하면 다형성이란 다양한 형태로 표현이 가능한 것을 의미합니다.

다형성을 활용하면 부모 클래스가 자식 클래스의 동작 방식을 알 수 없어도 오버라이딩을 통해서 자식 클래스에 접근할 수 있습니다.

 

OOP의 5가지 설계 원칙 (SOLID)

 

1. SRP ( Single Responsibility Principle ) : 단일 책임 원칙

  • 클래스는 단 하나의 책임(목적)을 가지고, 그에 대한 하나의 책임을 져야 합니다.

2. OCP ( Open Close Principle ) : 개방-폐쇄 원칙

  • 확장에는 열려 있어야 하고  변경에는 닫혀 있어야 합니다.
  • 즉, 클래스를 수정해야 한다면 그 클래스를 상속(확장)하여 수정을 진행합니다.

3. LSP ( Liskov Substitution Principle ) : 리스 코프 치환 원칙

  • 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 합니다.
  • 즉, 자식 클래스를 사용 중일 때, 거기에 부모 클래스로 치환하여도 문제가 없어야 합니다.

4. ISP (Interface Segregation Principle ) : 인터페이스 분리 원칙

  • 각 행위에 대한 인터페이스는 서로 분리되어야 합니다.
  • ex) 핸드폰으로 전화를 하는데 핸드폰 카메라가 방해가 되면 안 된다는 뜻

5. DIP ( Dependency Inversion Principle ) : 의존 역전 원칙

  • 상위 클래스가 하위 클래스에 의존하면 안 된다는 법칙.
  • 즉, 기본적인 공통되는 속성을 하위 클래스에 의존하면 안 된다.

 

짧은 정리

=> 결국 객체지향은 유지보수의 용이성과 개발 편의성을 중요시 여기는 개발 방법론입니다. 

      객체지향이 가지는 장점 덕분에 개발자 간의 코드 공유가 쉬워졌고, 서비스의 규모는 더욱 증가했으며,

      더욱 견고한 프로그램을 만들기 쉬워졌습니다. 

 

 

[참고]

https://blog.itcode.dev/posts/2021/08/07/what-is-oop

[기술면접] 백엔드 기술 면접 질문 - OOP

https://backendcode.tistory.com/160[무작정개발]

Comments