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

o_jooon_·2024년 1월 23일
0

CS

목록 보기
3/6
post-thumbnail
post-custom-banner

면접 단골 질문이자, 개발자라면 꼭 알아야 할 객체 지향 프로그래밍에 대한 포스팅입니다.


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

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법

기본 구성 요소

  • 객체 지향 프로그래밍은 기본적으로 클래스, 객체, 메서드로 구성된다.

클래스란?

클래스(Class)는 같은 종류의 집단에 속하는 속성(attribute)행위(behaviour)정의한 것이다.

  • 객체 지향 프로그램의 기본적인 사용자 정의 데이터형이다.
  • 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인해야 한다.

객체란?

객체(Object)는 클래스의 인스턴스에 할당된, 즉 실제로 메모리 상에 할당된 것으로 고유의 속성(attribute)를 가진다.

  • 객체는 클래스에서 정의한 행위(behaviour)를 수행할 수 있다.
  • 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 절약할 수 있다.

메서드란?

메서드(Method)는 클래스로부터 생성된 객체를 사용하는 방법으로, 객체에 명령을 내리는 메시지라고 할 수 있다.

  • 객체의 속성을 조작하는 데 사용된다.

객체 지향 프로그래밍 언어

  • Swift, C++, C#, Java, Python, JavaScript, Ruby, 등

객체 지향 프로그래밍의 특징

  • 객체 지향 프로그래밍은 크게 추상화, 캡슐화, 상속, 다형성의 네 가지 특징을 가진다.

1. 추상화(Abstraction)

  • 객체에서 공통된 속성과 행위를 추출하는 것
  • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
  • 불필요한 정보는 숨기고 중요한 정보만을 표현
  • e.g)
    김밥, 비빔밥, 떡볶이는 모두 ‘한식’에 해당하며,
    ’한식’ 이라는 추상화 집합을 만들어두고 한식이 가진 공통적인 특징을 정의하여 활용한다.

추상화가 필요한 이유

  • 새로운 객체가 추가되는 상황에서 공통된 특징을 가진 추상화 집합이 존재하면, 코드의 수정 없이 해당 집합에서 새로운 객체의 필요한 부분만 추가해줄 수 있다.
  • e.g)
    ’불고기’라는 새로운 음식을 추가하는 경우, ‘한식’ 이라는 집합이 구현되어 있다면, 해당 집합의 특징은 그대로 두고 불고기의 특징만 추가하면 된다.

2. 캡슐화(Encapsulation)

  • 데이터 구조데이터를 다루는 방법들을 결합시켜 묶는 것
  • 클래스의 외부에서는 노출된 특정 메소드에만 접근이 가능하고 내부에서 어떤 식으로 처리되는지 알지 못하도록 설계

캡슐화가 필요한 이유

  • 관련된 기능과 특성을 한 곳에 모아 분류하기 때문에, 코드를 재수정 없이 재활용 할 수 있다.
  • 접근제어자(private, public 등)를 통해 외부에 노출하지 않아야 할 정보 또는 기능을 은닉할 수 있다.

3. 상속(Inheritance)

  • 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것
  • 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능

상속의 장단점

장점단점
재사용으로 코드를 줄일 수 있다.
범용적으로 사용이 가능하다.
변수와 메서드를 자유롭게 사용 및 추가할 수 있다.
상위 클래스의 변경이 어렵다.
불필요한 클래스가 많아져 복잡해지거나 메모리가 낭비될 수 있다.
상속을 오사용하여 문제가 생길 수 있다.

4. 다형성(Polymorphism)

  • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석될 수 있는 것
  • 메서드를 동일 클래스 또는 하위 클래스에서 재정의 하여 사용

오버라이딩

  • 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용하는 것

오버로딩

  • 같은 이름의 메서드가 매개변수 또는 자료형에 따라 다른 기능을 하는 것

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

장점

  • 클래스 단위로 모듈화하여 개발하기 때문에 업무 분담이 편하고 대규모 소프트웨어 개발에 적합하다.
  • 클래스 단위로 수정이 가능하기 때문에 유지보수가 편하다.
  • 클래스를 재사용하거나 상속을 통해 확장함으로써 코드 재사용이 용이하다.
  • 보다 직관적인 코드 분석을 가능하게 한다.

단점

  • 처리 속도가 상대적으로 느리다.
  • 객체의 수가 많아짐에 따라 용량이 커질 수 있다.
  • 설계 시 많은 시간과 노력이 필요하게 될 수 있다.

참고

profile
안녕하세요.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 1월 28일

객체지향의 개념에 대해서 잘 정리해주셨네요 😄 SOLID 원칙에 대해서도 다뤄주시면 감사하겠습니다 !

답글 달기