JAVA

[JAVA] 객체지향 프로그래밍 이해하기 (2)

개발 공주 2023. 5. 29. 23:20
728x90

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

📌 우리가 객체지향 프로그래밍을 하다보면 필연적으로 만나게 되는 개념이 있습니다.

  • 바로 캡슐화, 상속, 다형성, 추상화입니다.
  • 앞으로 학습하게 되는 내용에 포함되어 있기 때문에 간단하게 학습하고 가겠습니다.

 

1) 캡슐화

  • 캡슐화란 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미한다.
  • 외부 객체에서는 캡슐화된 객체의 내부 구조를 알 수 없기 때문에 노출시켜 준 필드 혹은 메서드를 통해 접근할 수 있다.
  • 필드와 메서드를 캡슐화 하여 숨기는 이유는 외부 객체에서 해당 필드와 메서드를 잘못 사용하여 객체가 변화하지 않게 하는데 있다.
  • Java에서는 캡슐화된 객체의 필드와 메서드를 노출 시킬지 감출 지 결정하기 위해 접근 제어자를 사용한다.

2) 상속

객체지향 프로그래밍에는 부모 객체와 자식 객체가 존재한다.

부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려주어 자식 객체가 이를 사용할 수 있도록 만들 수 있습니다.

  • 위 같은 행위를 상속이라고 할 수 있는데 상속을 하는 이유는 다음과 같습니다.
    1. 각각의 객체들을 상속 관계로 묶음으로써 객체 간의 구조를 파악하기 쉬워집니다.
    2. 필드와 메서드를 변경하는 경우 부모 객체에 있는 것만 수정하게 되면 자식 객체 전부 반영이 되기 때문에 일관성을 유지하기 좋습니다.
    3. 자식 객체가 부모 객체의 필드와 메서드를 물려받아 사용할 수 있기 때문에 코드의 중복이 줄어들며 코드의 재사용성이 증가됩니다.

3) 다형성

객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러가지 형태로 재구성되는 것을 의미한다.

Car 클래스를 토대로 자동차 객체를 만들 때 A자동차 객체와 B자동차 객체의 경적 소리가 다르다면 ‘경적을 울리다’라는 행위 즉, horn(); 메서드의 구현을 다르게 재정의 하여 사용할 수 있습니다.

 

4) 추상화

객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것을 추상화라고 합니다.

  • 공통적이고 중요한 것들을 모아 객체를 모델링합니다.
  • 현실세계의 여러 종류의 자동차들이 공통적으로 가지고 있는 가속, 브레이크, 속도와 같은 것들을 모아 자동차라는 객체를 모델링 할 수 있습니다.

2. 객체와 클래스

  • 우리는 객체를 생성하기 위해서 설계도가 필요하다
  • 현실세계에서는 자동차를 만들기 위해 자동차 설계도를 토대로 자동차를 생산합니다.
  • 마찬가지로 소프트웨어에서도 객체를 만들기위해서는 설계도에 해당하는 클래스가 필요합니다.
  • 이때 클래스를 토대로 생성된 객체를 해당 클래스의 ‘인스턴스’라고 부르며 이 과정을 ‘인스턴스화’라고 부릅니다.
  • 동일한 클래스로 여러 개의 인스턴스를 만들 수 있습니다.
  • 이때 객체와 인스턴스는 거의 비슷한 표현이지만 자세하게 구분해보자면 아래와 같습니다.

  • 자동차 클래스를 통해 만들어진 하나의 자동차를 인스턴스라고 부르며 이러한 여러 개의 인스턴스들을 크게 통틀어서 자동차 객체라고 표현할 수 있습니다.