☕Java 캡슐화, 상속, 추상화, 다형성

hamsang·2022년 5월 7일
0

Java

목록 보기
1/36
post-thumbnail

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


💊캡슐화 (Encapsulation)

정보 은닉화 ▶ 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계

  • 데이터와 코드의 형태를 외부로부터 알 수 없게한다.
  • 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만든다.

한 곳에서 변화가 일어나도 다른 곳에 미치는 사이드 이펙트를 최소화시킨다. 즉, 객체 내부의 어떤 동작에 대한 구현이 어떻게 되어 있는지 감춘다.

  • 결합도란 어떤 기능을 실행할 때 다른 클래스나 모듈에 얼마나 의존적인지를 나타내는 지표이다. OOP는 객체 간의 독립성을 강조하는 이론인데, 결합도가 높으면 OOP 설계의 의미가 없다.

동시에 객체 내의 모듈 간의 요소가 밀접한 관련이 있도록 구성하여 응집도를 높여야한다.

목적

접근 지정자를 private로 선언하여 데이터를 보호(정보 은닉화) 하고, 보호된 변수는 getter나 setter 등의 메서드를 통해 간접적 접근을 허용한다. 의도하지 않은 동작 오류를 방지하고 유지보수 효율을 높인다.


👪상속 (Inheritance)

여러 개체들이 지닌 공통된 특성틀 부각시켜 하나의 개념이나 법칙으로 성립하는 과정 (일반화)

  • 기존 상위클래스의 기능을 가져와 재사용을 할 수 있고, 상속 받은 하위 클래스에 새로운 기능도 추가할 수 있다.
  • 코드의 중복을 없앤다. (상속 관계를 맺으면 부모 클래스의 속성들을 자동으로 물려받기 때문에 자식 클래스에서 다시 정의할 필요가 없다.)

상속을 '코드 재사용'의 개념으로 이해하면 클래스간 결합도가 높아져 유지보수 효율이 아주 떨어진다. 아래의 관계가 성립할 때 상속을 사용하자.
  • 코드 재사용 관점 < 기능 확장의 관점

IS-A 관계 (is a relationship)

'~은 ~이다' / 상속관계

  • 상위 클래스 : 일반적인 개념
  • 하위 클래스 : 구체적인 개념

    ex) 상위클래스: 동물, 하위클래스: 포유류, 파충류
    ex) 햄스터는 동물이다. (햄스터의 부모 클래스는 동물)

HAS-A 관계 (has a relationship)

'~은 ~을 가지고 있다.' / 포함관계 or 구성 (Composition) 관계
클래스가 다른 클래스를 소유한 관계이다.

ex) 컴퓨터 안에는 CPU가 있다. (컴퓨터 객체가 CPU 객체를 구성함)


🥬추상화 (Abstraction)

객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출하는 작업

  • 세부적인 사물들의 공통적인 특징을 파악하여 추출하고, 필요없는 특성은 제거하여 하나의 묶음으로 정의한다.
    (핵심적인 개념 또는 기능을 간추려 내는 것)

  • 추상적인 개념에 의존해 설계해야 유연함을 갖출 수 있다.
  • 추상클래스 abstract
  • 인터페이스 interface

👩‍👧‍👦다형성 (Polymorphism)

한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러 형태(객체)로 재구성 되는 것

서로 다른 클래스의 객체가 같은 동작 수행 명령을 받았을 때, 각자의 특성에 맞는 방식으로 동작하는 것

  • 한부모 밑에서 태어난 자식이나 쌍둥이가 똑같지는 않다는 것과 비슷한 개념이다.

  • 오버로드(Overload) 또는 오버라이드(Overide)
profile
햄생

0개의 댓글