Object-oriented programming.

박슬기·2022년 9월 1일
0

기술면접

목록 보기
2/3

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

Object-oriented programming.
컴퓨터 프로그래밍 패러다임 중 하나로, 절차 지향 프로그래밍은 프로그래밍의 중심이 컴퓨터였지만 객체 지향 프로그래밍은 인간 중심적이다.


장점

  • 코드 재사용이 용이하다 👉 상속을 통한 확장 사용 가능
  • 유지 보수가 쉽다 👉 일일이 찾아 수정할 필요 없이 멤버 변수나 메서드 변경으로 가능
  • 대형 프로젝트에 적합하다 👉 모듈화 개발 가능

단점

  • 🐌 처리 속도가 상대적으로 느리다.
  • 🚛 객체가 많으면 용량이 커진다.
  • ⏰ 설계에 많은 시간과 노력이 필요하다.

특징

OOP가 생기며 갖추게 된 4 가지 특징으로 이 특징들을 잘 이해하여야 효율적인 구현이 가능해진다고 한다.

1. 추상화(Abstraction)

불필요한 정보는 숨기고 필요한 정보만 표현함으로써 공통의 속성이나 기능을 묶어 이름 붙이는 것을 뜻한다.
  • 세부적인 사물들의 공통 특징을 파악하여 하나의 집합으로 만들어 내는 것
  • 추상적인 개념에 의존하여 설계해야 유연함을 갖출 수 있다.

2. 캡슐화(Encapsulation)

수정 시 다른 곳의 변화에 미치는 영향을 최소화하기 위해 접근할 필요가 없는 것들을 권한 제한으로 정보를 은닉한다. 이를 통해 높은 응집도와 낮은 결합도를 유지할 수 있다.
  • 변화에 미치는 영향 최소화 (객체의 내부적 기능 구현 방법 보안화)
  • 낮은 결합도(Coupling)를 유지하도록 설계하는 것을 뜻하며, 모듈 의존성을 최대한 낮게 만드는 것
  • 높은 응집도와 낮은 결합도를 위해 접근할 필요가 없는 것들을 제한을 걸어 정보 은닉

3. 상속

부모 클래스의 속성과 기능을 그대로 이어 받아 사용하고, 일부분을 변경해야 할 경우 자식 클래스에서 해당 기능만 수정(정의)하여 사용할 수 있게 하는 것을 뜻한다.
  • 여러 개체들이 지난 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립하는 과정
  • 자식 클래스를 외부로부터 은닉하는 캡슐화의 일종 (새로운 외부 클래스가 추가되어도 영향을 받지 않아야 함)
  • 상위 클래스의 변경이 어렵고, 불필요한 클래스가 증가할 위험이 있음

4. 다형성(Polymorphism)

하나의 변수, 함수명이 상황에 따라 다르게 해석될 수 있음을 뜻한다.
  • 부모 클래스의 메소드를 자식 클래스가 오버라이딩하여 자신의 역할에 맡게 활용하는 것
  • 즉, 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
  • 어떤 클래스 객체가 참조되는지와 무관하게 프로그래밍하는 것이 가능
  • 상속 관계에 있으면 자식 클래스가 추가되어도 부모에게서 함수를 참조해오기 때문에 타 클래스에 영향을 받지 않는다.
  • 코드를 간결하게 해주고, 유연함을 갖추게 해 줌

오버로딩(Overloading) : 같은 이름의 메서드를 여럿 가지면서 매개변수의 유형과 개수가 다르도록 하는 것

오버라이딩(Overriding) : 상위 클래스가 갖고 있는 메서드를 하위 클래스가 재정의하여 사용하는 것


설계 원칙

SOLID라고 부르는 5가지 설계 원칙

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

  • 클래스는 단 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다.

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

  • 확장에는 열려있고, 변경에는 닫혀있어야 한다.

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

  • 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

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

  • 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

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

  • 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

💡 요약하자면...

객체지향 프로그래밍이란 프로그램을 상태와 행위로 이루어진 객체라는 기본 단위로 나누고, 이 객체들 간의 상호작용을 통해 프로그램을 설계하고 개발하는 것이다. 특정 개념의 함수와 자료형을 함께 묶어서 관리하기 위해 만들어 졌으며, 재사용과 유지 보수가 쉽고, 모듈화 개발이 가능하므로 업무 분담에 용이하나,처리 속도가 느리며 객체가 많을수록 용량이 커진다는 단점이 있다!

profile
블로그 글을 옮겨오고 있습니다. 이 전 블로그 👉 dinobox.tistory.com

0개의 댓글