TIL 22_12_09

YES31·2022년 12월 9일
0

TIL

목록 보기
11/35
post-thumbnail

객체 지향(Object-Oriented)

객체 지향 모델링은 기능이 아닌 객체가 중심이 되며 "누가 어떤 일을 할 것인가?"가 핵심이 된다. 즉, 객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점을 맞춘다.

  • 책임과 권한을 가진 객체들이 서로 메세지를 주고받으며 협력해서 필요한 기능을 수행하도록 시스템을 개발하는 것을 객체 지향이라고 한다.
  • 크고 복잡한 시스템을 효과적으로 분해하고 구성할 수 있고, 손쉽게 이해하고 효율적으로 다룰 수 있게 도와주는 방법으로 인정받아 많은 프로그래밍 언어에 적용되어 왔고 지금은 가장 인기 있는 프로그래밍 패러다임으로 자리 잡았다.
    .
    .
    .

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

1. 추상화(abstraction)

객체들의 공통적인 특징(기능, 속성)을 도출하는 것 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다.(클래스가 없는 객체지향 언어도 존재 ex.JavaScript)

2. 캡슐화(Encapsulation)

🎈 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것을 캡슐화라고 한다.

즉, 캡슐화를 사용하는 가장 큰 이유눈 정보은닉이다. 정보은닉은 객체에 대한 중요한 정보를 외부로 노출시키지 않도록 하기 위한 기법이다.

  • 캡슐화의 목적은 변경하기 쉬운 객체를 만드는 것.
  • 캡슐화를 통해 객체 내부의 접근을 제한하면 객체와 객체 사이의 결합도를 낮출 수 있기 때문에 설계를 좀 더 쉽게 변경할 수 있게 된다.

실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다. 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것. 코드가 묶여있어서 오류가 없어 편리하다. 데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신을 한다. 보통 라이브러리로 만들어서 업그레이드해 사용할 수 있다.

3. 상속성(Inheritance)

  • 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것.
  • 이미 작성된 클래스를 받아서 새로운 클래스를 생성하는 것.
  • 기존 코드를 재활용해서 사용함으로써 객체지향 방법의 중요한 기능 중 하나에 속한다.

4. 동적바인딩(Dynamic Binding)

  • 가상 함수를 호출하는 코드를 컴파일할 때, 바인딩을 실행시간에 결정하는 것.
  • 파생 클래스의 객체에 대해, 기본 클래스의 포인터로 가상 함수가 호출될 때 일어난다.
  • 함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행
  • 프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장(다형 개념 실현)

5. 추상화(Abstraction)

📒 객체에서 공통된 부분을 모아 상위 개념으로 새롭게 선언하는 것.
즉, 불필요한 부분을 생략하고 객체 속성 중 공통적이고 중요한 것에만 중점을 두어 모델화 하는 것입니다.

  • 객체들의 공통적인 특성을 파악하여 필요 없는 특성을 제거하는 과정
  • 시스템을 구축하기 전에 시스템 구조 및 구성을 가시적으로 볼 수 있고, 해당 시스템과 유사한 모델을 만들어 여러가지 테스트를 진행
  • 복잡한 내부 구현에 신경쓰지 않고, 외부에 노출되어 있는 인터페이스만을 이용해 코드를 작성

6.다형성(Polymorphism)

💡 다형성이란 객체(클래스)연산을 수행하게 될 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성으로 다른 여러 형태로 재구성 되는 것을 말한다.

즉, 동일한 메소드의 이름을 사용하지만 메소드에 대해 클래스마다 다르게 구현되는 개념이 다형성이다.

  • 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것
  • 동일한 명령의 해석을 연결된 객체에 의존하는 것
  • 오버라이딩(Overriding), 오버로딩(Overloading)
오버라이딩(Overriding) - 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라
                       호출하여 사용하는 것

.
.
.

절차지향과 객체지향의 구분

  • 캡슐화, 다형성, 클래스 상속을 지원하는가 ?
  • 데이터 접근 제한을 걸 수 있는가?

    객체 지향 = 두가지 조건을 만족

profile
🏀 주니어 개발자

0개의 댓글