객체지향 정리

장성우·2022년 2월 28일
0

CS 면접

목록 보기
1/2

객체지향이 무엇인가요? 절차지향과의 차이점은 뭐죠?

오라클에서는 객체지향 프로그래밍에 대해서 다음과 같이 정의하고 있다.

객체지향 프로그래밍은 클래스간의 구조와 상호작용하고 잘 정의된 객체들을 기반으로하는 프로그래밍 도구이다.

또한 클래스와 객체에 대해서는 다음과 같이 정의하고 있다.

클래스는 데이터와 데이터를 처리하는 메소드들을 정의한 구조체이다.

객체는 클래스의 실행가능한 복제품이다.

지원하는 기능과 특징의 차이점

  1. 캡슐화,다형성,클래스 상속을 지원하는가?
  2. 데이터 접근 제한을 걸 수 있는가?
💡 객체지향은 코드의 재사용성이 높고, 유지보수가 용이하다는 점이 이점이다.

객체지향 프로그래밍은 절차적 프로그래밍의 한 종류이다. 객체지향 프로그래밍과 절차적 프로그래밍의 차이점은 데이터와 함수의 결합도를 정하는 것에 있다.

  • 순수한 절차적 프로그래밍의 경우 모든 데이터와 함수 사이의 결합도를 가능한 낮은 상태로 유지하는 방식이다.
  • 반면에 객체 지향 프로그래밍의 경우 데이터가 관련된 함수들의 모음을 가지는 방식이다.

가령 문제 해결을 위해서 사용하는 자료구조가 리스트나 트리의 형태를 가진다면, 절차적 프로그래밍이 적합하다. 왜냐하면 데이터와 함수의 결합도가 낮을 수록 함수를 재사용하기 편하기 때문이다.

반면에 다루는 데이터가 구조화되어 있다면(그래서 높은 결합도를 가지고 있다면) 객체 지향 프로그래밍이 좀 더 적합하다. 왜냐하면 각각의 구조화된 데이터에 맞는 메소드를 구현하고, 외부에서 데이터에 직접 접근하는 대신에 메소드를 통해 간접적으로 접근하여, 외부와 구조화된 데이터 사이의 결합도를 낮출 수 있다.(캡슐화)

객체지향 SOLID 원칙에 대해서 설명해 주세요.

SOLID 원칙은 객체지향 프로그래밍에서 클래스를 디자인하기 위한 5가지 원칙이다. 2000년에 Robert J. Martin에 의해서 처음으로 제시되었으며, SOLID 원칙의 내용은 다음과 같다.

  1. Single responsibility principle (단일 책임 원칙) : 하나의 클래스는 하나의 기능을 가져야 한다. 결합도(Coupling)은 낮추고 응집도(Cohesion)은 높여야 한다.
  2. Open-closed principle (개발 폐쇄 원칙) : 클래스는 수정없이 확장할 수 있어야 한다.
  3. Liskov substitution principle (리스코프 치환 원칙) : 자식 클래스는 내려받은 부모클래스의 기능을 그대로 수행할 수 있어야한다.
  4. Interface Segregation principle (인터페이스 분리 원칙) : 다양한 기능을 가지는 다목적 인터페이스보다 특정 기능만 가지는 인터페이스가 좋으며, 클래스에 필요한 인터페이스만 implement해야한다.
  5. Dependency Inversion principle (의존 역전 원칙) : 클래스는 다른 클래스에 직접 의존하기 보다, 인터페이스나 추상 클래스에 의존해야한다.
    ex ) (X) class A = object, (O) interface A = object

2번 원칙이 객체지향의 목표라면, 5번 원칙은 2번을 위한 가장 중요한 기능이다.

객체지향 4가지 특징에 대해서 설명해 주세요.

객체지향의 4가지 특징은 다음과 같습니다.

  1. 캡슐화 : 캡슐화(encapsulation)는 사용자들에게 해당 객체의 기능(서비스)과 사용법만 제공하고 내부는 감추어(변경할 수 없게 함) 쉽게 사용할 수 있게 하는 개념. 데이터 무결성, 결합도를 낮츠고 응집도를 높힌다, 재사용하기 좋다.
  2. 상속: 클래스 간의 관계를 계층화하고 분류하는데 이런 개념. 코드의 가독성을 높힌다. 재사용성이 커진다. 확장이 용이하다. 유지보수에 좋다.
  3. 다형성: 동일한 메서드 이름을 사용하지만 메서드에 대해 클래스마다 모두 다르게 구현되는 개념. 오버라이딩과 오버로딩
  4. 추상화: 객체들의 공통점을 뽑아 클래스, 인터페이스라는 이름을 붙여놓은 것.

대표적인 객체지향 언어에는 어떤 것들이 있나요?

가장 많이 사용하는 언어로 파이썬과 자바, C++이 있습니다.

면접 질문 참고

https://velog.io/@hygoogi/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%AA%A8%EC%9D%8C

Reference

  1. Lesson 8: Object-Oriented Programming (oracle.com)
  2. OOP vs Functional Programming vs Procedural - Stack Overflow
  3. The SOLID Principles of Object-Oriented Programming Explained in Plain English (freecodecamp.org)
  4. 쉽게 배우는 소프트웨어 공학 : 네이버 지식백과 (naver.com)
  5. 자바의 정석
  6. https://ktae23.tistory.com/163
  7. https://namu.wiki/w/객체 지향 프로그래밍#s-3.1
profile
성장하는 개발자가 되자.

0개의 댓글