[TIL] 객체 지향 프로그래밍 (OOP)

Kyeong_Bong·2022년 9월 23일
1

TIL

목록 보기
18/18
post-thumbnail

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

  • Object-Oriented Programming (OOP)
  • 프로그래밍에서 필요한 데이터를 추상화 시켜서 상태와 행위를 가진 객체로 만들고
    객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
  • 객체지향은 패러다임을 뜻하는 단어로써 어떠한 견해를 용어로 풀어낸 것



📌 객체지향의 등장 배경

순차적 프로그래밍 ➡ 절차적 프로그래밍 ➡ 객체지향 프로그래밍

1. 순차적 ( 비구조적 ) 프로그래밍

  • 하나의 함수나, 코드 몸체에 연속된 코드를 작성하는 프로그래밍 패러다임
  • A ➡ B ➡ C 같이 코드를 작성하다 A로 돌아가야하면 goto문을 사용하여 특정 위치로 건너뛸 수 있다.
  • 초기 프로그래밍 언어들에서 주로 보인다.

    👍 장점 : 흐름이 눈으로 보이기 때문에 매우 직관적이다.

    👎 단점 : 규모가 커질수록 유지보수가 어렵고 흐름이 복잡해져서 코드 파악이 어려워진다
    또한 코드의 재사용성을 떨어뜨린다.

    💻 순차적 프로그래밍 사용 언어 : 어셈블리어

2. 절차적 ( 구조적 ) 프로그래밍

💡 무엇을 어떤 절차로 할 것인가

  • 코드의 위에서 아래로만 진행되도록 절차와 순서를 갖게 하는 패러다임
  • 비구조적 프로그래밍의 문제점을 보완하고자 등장함
  • 프로그램의 순서와 흐름을 먼저 세우고
    반복되는 동작을 함수 및 프로시저(리턴값이 없는 함수) 형태로 모듈화하여 사용하는 방식이다.
  • 실행 순서 ( 절차 )가 중점이 된다.
  • 순차선택반복 의 구조를 반복해가며 코드를 진행한다.

    장점👍 : 프로젝트가 커질 시 구조가 복잡해지고중복 코드를 작성할 수도 있다

    단점👎 : 컴퓨터 눈높이로 구성된 문법으로 바닥부터 입맛대로 설계하기 용이하다

    💻 절차적 프로그래밍 사용 언어 : C, Visual Basic, Fortran, Pascal


📌 객체 지향 프로그래밍

🔍객체 ( Object )

객체 또는 오브젝트(object)는 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료 구조, 함수 또는 메소드가 될 수 있다. 프로그래밍 언어는 변수를 이용해 객체에 접근하므로 객체와 변수라는 용어는 종종 함께 사용된다. 그러나 메모리가 할당되기 전까지 객체는 존재하지 않는다.
나무위키

💡 누가 어떤 일을 할 것인가

  • 어떤 개념에 대한 자료형과 함수를 객체 형태로 함께 묶어서 관리하기 위해 등장한 패러다임
  • 객체 내부에 자료형 필드와 함수(매서드)가 함께 존재함

    • 장점👍
      • 코드의 재사용성
      • 간편한 유지보수
      • 큰 규모의 프로그래밍에 유리함

    • 단점👎
      • 느린 속도
      • 높은 설계역량의 요구
      • 코드의 잠재적인 복잡성

    • 💻 절차적 프로그래밍 사용 언어 : C++ , C# , Java , Python , JavaScript , Ruby , Swift

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

1. 추상화 (Abstraction)

  • 객체의 공통 속성,기능을 클래스로 정의하는 것
    ( 어떠한 기능 중 핵심적인 기능을 추출하여 이를 일반화하는 것 )

  • 객체들의 복잡도를 관리할 수 있으며, 유연한 설계가 가능하다.

  • 장점👍
    • 복잡도를 관리할 수 있다
    • 유연한 설계가 가능하다.
    • 코드를 간결하게 해 준다.

  • 단점👎
    • 내부파악 및 수정이 어렵다.
    • 성능 저하

2. 캡슐화 (Encapsulation)

  • 클래스의 내부 변수와 매소드를 하나로 패키징하는 것

  • 정보 은닉🔒
    • 객체의 내부 구현을 숨기으로써 객체가 반드시 정해진 메소드를 통해 상호작용하도록 유도한다.

  • 객체의 응집도와 독립성을 높임으로써 객체의 모듈화를 지향한다.

  • 장점👍
    • 객체의 모듈화가 잘 되어있을 때 재사용이 매우 편하고 간편한 유지보수가 가능하다.

3. 상속성(inheritance)

  • 부모 클래스가 가진 함수, 데이터 등을 자식 클래스가 그대로 물려받는 것 or 살짝 다듬어서 사용할 수 있게 하는 것

  • 이미 작성된 클래스를 받아서 새로운 클래스를 생성

  • 장점👍
    • 외부에선 개별적인 자식 클래스들과 무관하게 개발을 이어갈 수 있다.
    • 코드 재사용이 용이해진다.

  • 단점👎
    • 부모 클래스에 의존하는 자식 클래스가 많아졌을 때 부모 클래스를 변경시
      의존하고 있는 자식 클래스 들이 영향을 받는다.
    • 같은 종류의 클래스가 아닌 다른 종류의 클래스를 재사용하기 위해 상속을 받으면
      문제가 발생할수 있다.

4. 다형성(polymorphism)

  • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것

  • 어떠한 요소에 여러 개념을 넣어 놓는 것
profile
Junior Developer🔥

0개의 댓글