객체 지향 프로그래밍 이해 정리 메모

dogineer·2023년 11월 22일
0
post-thumbnail

0. 객체, 클래스, 인스턴스란?

객체(Object) 는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는
공간을 의미하며 값을 저장할 변수와 작업을 수행 할 메소드 서로 연관된 것들끼리 묶어서 만든 것
자신의 속성을 가지고 있고, 다른 것과 식별 가능한 것을 말한다.
"OOP 관점에서 클래스의 타입으로 선언되었을 때 객체라고 부른다."

클래스(Class) 객체를 만들기 위한 설계도 또는 이라고 한다.
"연관되어 있는 변수와 메서드의 집합"

인스턴스(Instance)클래스를 바탕으로 실체화하여 메모리에 할당된 구체적인 실체
"OOP 관점에서 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다"

1. 객체지향(OOP)이란?

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

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

추상화

  • 객체에서 공통된 속성행위를 추출 하는 것
  • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
  • 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것

캡슐화

  • 데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것(변수와 함수를 하나로 묶는 것)
  • 낮은 결합도를 유지할 수 있도록 설계
  • 속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점이 있고 캡슐화를 통해서 정보은닉을 활용 할 수도 있다. ( 접근 제어자의 활용 )

상속

  • 클래스의 속성과 행위를 하위 클래스에 물려주거나
    하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 말함
  • 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능
  • 장점
    • 재사용으로 인한 코드가 줄어든다.
    • 범용적인 사용이 가능하다.
    • 자료와 메서드의 자유로운 사용 및 추가가 가능하다.
  • 단점
    • 상위 클래스의 변경이 어려워진다.
    • 불필요한 클래스가 증가할 수 있음
    • 상속이 잘못 사용될 수 있음

다형성

  • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
  • 어떠한 요소에 여러 개념을 넣어 놓는 것
  • 객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나
    상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있다.
  • 오버라이딩
    • 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것
  • 오버로딩
    • 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것

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

장점

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

단점

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

4. SOLID (객체 지향 설계 원칙)

객체 지향적으로 설계하기 위해 SOLID 라 불리는 다섯 가지 원칙

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

  • 하나의 클래스단 하나의 책임만 가져야 한다.
  • 단일 책임 원칙을 지키지 않을 경우 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다.

개방-폐쇄 원칙 OCP (Open/Closed Principle)

  • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • 기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않는다.

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

  • 프로그램 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

인터페이스 분리 원칙 ISP (Interface Segregation Principle)
- 범용 인터페이스 하나보다 클라이언트를 위한 여러 개의 인터페이스로 구성하는 것이 좋다.

  • 인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  • 클라이언트가 필요로 하는 인터페이스로 분리함으로써 각 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 만들어야 한다.

의존관계 역전 원칙 DIP (Dependency Inversion Principle)

  • 추상화에 의존해야지 구체화에 의존하면 안됨
  • 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고 저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.
profile
왈왈왈 메모장입니다 왈왈왈

0개의 댓글