Live Today

[Java] 객체 지향 프로그래밍 (OOP) 본문

Java

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

ilivetoday 2023. 6. 12. 23:13
반응형

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

  • 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.
  • 우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 상태와 행위를 가진 객체를 만들고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다.
  • 즉, 기능이 아닌 객체가 중심이며 "누가 어떤 일을 할 것인가?"가 핵심
  • 특징으로는 캡슐화, 상속, 다형성, 추상화 등이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다.
  • 객체 지향 프로그래밍은 역할과 구현을 구분하여 객체들 간의 직접적인 결합을 피하고, 느슨한 관계 설정을 통해 보다 유연하고 변경이 용이한 프로그램 설계를 가능하게 함

 

✔️ 객체 지향 프로그래밍 장점

  • 코드 재사용성 용이
  • 유지보수 쉬움
  • 대형 프로젝트에 적합

 

✔️ 객체 지향 5대 설계 원칙

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙 클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
  2. OCP(Open-Closed Principle) : 개방-폐쇄 원칙 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
  3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. DIP(Dependency Inversion Prinsiple) : 의존 역전 원칙 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

 

✔️ 객체 지향 프로그래밍 4가지 특징

1. 추상화

 

  • 공통성과 본질을 모아 추출하는 것
  • 예시 : 서울의 지하철 노선도
    • 서울의 지리를 추상화시켜 보여주는 대표적인 예
  • 따라서, 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것

 

2. 상속

 

  • 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
  • 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있도록 함
  • 반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근
  • 매서드 오버라이딩을 사용하여 내용을 재정의할 수도 있음

 

3. 다형성

 

  • 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가지 수 있는 성질
  • 즉, 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특징
  • 대표적인 예로, 메서드 오버라이딩, 머세드 오버로딩
    • 오버라이딩 : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것
    • 오버로딩 : 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것

 

4. 캡슐화

 

  • 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
    • 데이터 보호 : 외부로부터 클래스에 정의된 속성과 기능들을 보호
    • 데이터 은닉 : 내부의 동작을 감추고 외부에는 필요한 부분만 노출
  • 즉, 외부로부터 클래스에 정의된 속성과 기능들을 보호하고, 필요한 부분만 외부로 노출될 수 있도록 하여 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 목적이 있음
  • 접근 제어자와 getter/setter를 사용해 캡슐화를 구현할 수 있음

'Java' 카테고리의 다른 글

[Java] Java 장단점  (0) 2023.06.15