JAVA - Pillars of OOP

Coding Cat·2023년 10월 15일

JAVA

목록 보기
1/4
post-thumbnail

클래스를 본격적으로 하기전에 필요한 개념들

객체는 객체 지향 프로그래밍의 가장 기본적인 단위이자 시작점이라 할 수 있다.
객체 지향 개념의 가장 기본적인 전제는 실제 세계는 객체들로 구성되어 있으며, 보여지는 모든 현상과 발생되는 모든 사건은 이러한 객체들 간의 상호작용을 통해 발생한다는 것을 출발한다.
“모든 실재(實在)하는 대상”을 객체 지향 프로그래밍 언어에서는 객체라고 부른다.
-인사이트

객체(Object)

  • 클래스에 선언된 모양 그대로 생성된 실체를 말하여 '클래스의 인스턴스'라고 부른다.
  • 소프트웨어 세계에 구현할 대상

인스턴스(Instance)

  • 클래스를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
    • 즉, 현실의 객체를 소프트웨어 내에서 구현된 실체라고 볼 수 있다.
  • 클래스를 사용하여 Heap Area에 새로운 인스턴스(객체)를 생성할 수 있다.

클래스는 개념이고 개념으로부터 현실화(컴퓨터에서 현실화는 메모리 세계를 의미)시키는 것이 객체이다. 클래스는 명사(변수)와 동사(메서드), 스펙(멤버변수)과 기능(메서드)으로 구성되어 있다.

클래스는 분류에 대한 개념이지 실체가 아니다. 객체는 실체다.
클래스와 객체의 관계는 붕어빵 틀과 붕어빵이 아니다.
-[스프링 입문을 위한 자바 객체지향의 원리와 이해]

OOP(Object Oriented Programming

oop(객체 지향 프로그래밍)의 concept

  • Encapsulatin(캡슐화)
    데이터, 데이터를 활용하는 함수(Method)를 캡슐(Class) 혹은 컨테이너 안에 두는 것을 의미한다. 연관있는 변수와 메서드를 클래스로 묶는 작업을 말한다.
  • 캡슐화는 어떻게 클래스 정보에 접근 혹은 수정하는지를 결정하는 권한을 제공한다.
    원칙은 하나의 목적을 이루기 위해 관련있는 것들만 하나의 클래스에 정의한다.
    • 정보은닉
      객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메서드를 통해 상호작용하도록 유도한다. 접근제어자 private로 선언하여 데이터를 보호하고, 보호된 변수는 getter나 settter 메서드를 통해서만 간접적으로 접근을 허용한다.

ex) 사람 클래스에 "하늘을 날다" 메소드 정의 -> "하늘을 날다" 메소드는 새 클래스에 정의하는 것이 어울림

  • Inheritance(상속)
    상위 개념의 특징을 하위 개념이 물려받는 것이다. 객체 지향의 상속은 is kind of를 만족해야한다. 상위 클래스로 갈수록 추상화 일반화 됐다고 말하며, 하위 클래스로 갈수록 구체화 특수화됐다고 말한다.
    • 상위 클래스의 물려줄 특성이 많을수록 좋다 (LSP)
      • 상위 클래스가 너무 빈약하면, 불필요한 형변환이 자주 일어난다.
    • 인터페이스
      • 다중 상속 대신 도입. 어떤 객체가 해야할 일을 정의하는 추상 자료형
      • 구현 클래스 is able to 인터페이스
      • 인터 페이스는 구현을 강제할 메서드가 적을수록 좋다.(ISP)

SOLID 원칙(객체지향 설계 5대 원칙)
SOLID 원칙 참고 사이트

  • Abstration(추상화)
    어떤 영역에서 공통된 속성들 중 필요한 부분만을 포착해서 인터페이스나 추상클래스로 설계하는 것이다.
    구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합체)으로 다루는 것이다.
    추상화란, 구체적인 것은 감추고, 대략적이고 전체적인 그림만 드러내는 것을 의미한다. 이렇게 추상화를 통해서 얻을 수 있는 장점은 유저가 구체적인 논리와 로직을 모르더라도 더 복잡한 논리를 구현할 수 있도록 한다.

ex) 커피머신을 통해서 커피를 내리기 위해서는 물, 커피콩, 그리고 어떤 종류의 커피를 만들지 고를 필요가 있다. 여기서 가장 중요한 것은 준비물만 있으면 나머지는 커피머신이 알아서 커피를 만들어 준다는 점이다. 즉, 물의 온도는 어느정도여야 하는지, 몇 그람의 커피콩을 갈아야 할지는 알 필요가 없다. 커피를 만드는 복잡한 과정은 버튼으로 '추상화'가 되었기 때문에 누구나 커피를 집에서도 만들 수 있다.

  • Polymorphism(다형성)
    Poli(여러개의) + 형태(다형성) Forms, Shape
    상속과 연관있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른형태로 재구성 되는 것을 말한다.
    기초 클래스 또는 어떠한 인터페이스를 구현하는 상위 클래스를 생성하고, 해당 클래스를 상속받는 다수의 하위 클래스를 만들어 상위 클래스의 포인터나 참조 변수 등이 하위 클래스의 객체를 참조하게 하는 것이다.
    다형성을 구현하는 방법에는 "오버로딩", "오버라이딩", "함수형 인터페이스", "다운캐스팅", "업캐스팅"이 있다.
profile
나의 archive

0개의 댓글