공부 기록/개념정리

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

코딩걈자 2024. 3. 28. 14:35

OOP (Object-Oriented Programming)

  • 프로그래밍을 여러 개의 독립된 단위 '객체' 드의 상호 작용을 통해 로직을 구성하는 프로그래밍 방법(패러다임)
    • 객체: 속성과 행위를 가진 단위, 대상을 나타내는 단어
      • 클래스를 기반으로 실제로 메모리에 할당된 인스턴스
      • 사람이 인식할 수 있는 사물 또는 개념을 프로그래밍에서 모델링 한 것
    • 상호작용 : 메시지 주고받기, 데이터 처리 등
    • 프로그래밍 패러다임 : 코드를 어떻게 작성할지 결정
  • 절차지향 프로그래밍 : 명령어의 목록, 데이터를 중심으로 필요한 기능을 함수로 구현하는 방식
  • 코드의 재사용성이 높고, 객체의 독립성이 높아 생산성이 향상, 유지보수가 우수함
  • 일상의 언어와 유사하다는 장점으로 인해 모델링이 가능
  • 모델링 과정으로 인해 개발 속도가 느리고, 클래스 확인으로 인한 실행 속도가 느림, 객체가 많아짐에 따라 인스턴스 증가
    • 모델링 : 복잡한 시스템이나 개념을 단순화하고 추상화하여 이해하기 쉽게 표현하는 과정이나 방법
    • 인스턴스 : 클래스로 인해 실제 생성된 객체를 의미

(1) 캡슐화

  • 한 객체가 특정한 하나의 목적을 위해 속성(데이터)과 행위(메소드)를 하나로 묶는 것
  • 구현 코드를 외부에 감춰 은닉하는 목표 => 변경 가능성이 높은 부분은 내부에 숨김
  • 데이터는 직접 접근이 안되고 함수를 통한 접근만 가능
  • 객체의 응집도와 독립성을 높임 => 모듈화 (재사용 용이)

 

(2) 은닉화

  • 내부 구조는 private하게 감추고 외부에서 조작할 수 있는 정보만 public으로 공개하는 것
  • 캡슐화, 업캐스팅, 인터페이스&추상클래스 등으로 구현
  • 외부 간섭으로 인해 발생하는 오류를 방지함
  • 필요한 부분만 알고 사용하면 되는 장점이 있음
  • 모듈 내의 응집도를 높이고, 모듈간의 결합도를 감소시킴

=> 캡슐화 vs 은닉화 : 캡슐화는 클래스로 묶는 작업, 은닉화는 객체에서 속성을 직접 접근하지 못하게 숨기는 것

(3) 상속

  • 상위 클래스에서 정의된 기능을 가져와 재사용하거나, 새로운 기능을 추가하여 자식클래스에 맞게 재정의 하는 방법
  • 코드의 중복 감소, 재사용성 증가

(4) 추상화

  • 목적과 관련 없는 부분을 제거하고 필요한 정보만을 표현하기 위해, 객체의 공통적인 속성과 행위를 하나로 묶는것
  • 보통 객체 지향 프로그래밍에서 클래스를 정의하는 것을 의미

(5) 다형성

  • 객체가 상속을 통해 기능을 확장, 변경하여 여러 형태의 객체로 재구성 되는 것 
  • 하나의 변수명이 상황에 따라 다른 의미로 해석될 수 있음을 뜻함
    • 오바라이딩 : 상위 클래스와 동일한 이름의 함수를 재 정의 하는 것
    • 오버로딩 : 하나의 클래스 안에서 같은 이름을 가진 함수가 여러개 (함수의 인자는 달라야함)

(6) 동적 바인딩

  • 런타임에 값에 따라 변수 데이터 타입, 호출된 함수가 결정
  • 프로그램 실행 파일이 만들어지고 이를 실행하면서 변수 및 함수가 호출될 때 바인딩
    • 바인딩: 컴퓨터 프로그래밍에서 각종 값들이 확정되어 더이상 변경할 수 없는 구속 상태가 되는 것
    • 각각의 코드가 메모리에 저장되고 메모리의 주소값이 저장되며 변경할 수 없는 상태
  • 함수가 가상함수로 선언이 되면, 포인터 변수가 실제로 가리키는 객체에 따라 호출의 대상이 결정된다
  • 메소드를 동적 바인딩하기 때문에 오버라이딩이 가능
  • 유연하지만 메모리공간이 낭비되고, 메모리 타입 확인을 위해 속도가 늦어짐
  • 정적 바인딩
    • 변수 및 함수가 컴파일 타임에 바인딩 되는 것
    • 변수를 선언하고 초기화하는 자체(타입 지정)
    • 호출되는 함수가 점프할 주소를 컴파일 타임에 결정
    • static으로 선언 된 것은 정적 바인딩
반응형