Java : 객체지향 프로그래밍 개념 이해

커비·2024년 11월 13일
0

Java

목록 보기
35/55

🗂️ 객체지향

현실세계에서 어떠한 제품을 만들기 위해 부품들을 하나씩 조립해서 완성시키는 것처럼 소프트웨어 또한 필요한 부품들을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만들 수 있다. 이러한 기법을 '객체지향 프로그래밍'이라고 함

객체란?

세상에 존재하는 물체를 뜻하며 식별이 가능한 것을 의미

: 예를 들면 물리적으로 존재하는 자동차, 도서관, 계산기를 객체라고 볼 수 있음
: 강의, 배달 주문, 운동과 같은 개념적인 것 또한 식별이 가능하기에 객체라고 볼 수 있음

🚘 자동차로 이해해보자!

객체의 구성 : 속성행위

  • 자동차는 회사, 모델, 색상, 가격, 속도 등의 속성을 가질 수 있다
  • 자동차는 가속, 브레이크, 기어변속, 조명, 경적 등의 행위를 가질 수 있다.

Java는 이러한 속성과 행위를 필드(속성)와 메서드(행위)로 정의하여 구현할 수 있다.


객체 모델링이란?

현실 세계에 있는 객체를 소프트웨어의 객체로 설계하는 것


객체 간의 협력

  • 현실 세계에서 사람이라는 객체와 자동차라는 객체는 서로 행위를 통해 상호작용을 하며 협력할 수 있다.
    - 사람이 자동차의 가속 페달을 밟으면 자동차는 이에 반응하여 속도를 올리며 앞으로 이동
    - 사람이 자동차의 브레이크 페달을 밟으면 자동차는 이에 반응하여 속도를 줄이며 정지

✅ 이해하고 넘어가기!

  • 사람 객체는 자동차 객체의 가속 페달이라는 메서드 gasPedal();를 호출
    : 그러면 자동차 객체는 이에 반응하여 속소 속성의 값을 증가시킴
  • 사람 객체는 자동차 객체의 브레이크 페달이라는 메서드 brakePedal();를 호출
    : 그러면 자동차 객체는 이에 반응하여 속소 속성의 값을 감소시킴
  • 소프트웨어의 객체들은 메서드를 통해 데이터를 주고 받을 수 있음
  • 사람 객체는 메서드를 호출할 때 괄호() 안에 데이터를 넣어 호출할 수 있는데 이 때 이 괄호 안에 넣는 데이터를 '파라미터' 혹은 '매개값'이라고 표현함

객체 간의 관계

  • 사용관계

  • 포함 관계

  • 🌟(중요!) 상속 관계

    공장에 자동차만 생산하는게 아니라 기차도 생산하고, 자동차와 기차 객체는 하나의 공통된 기계시스템 객체를 토대로 만들어진다고 가정했을 때
    자동차 객체


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

  • 캡슐화
  • 상속
  • 다형성
  • 추상화

💊 캡슐화란?

캡슐형 알약을 보면 캡슐 안에 가루를 담아 하나의 캡슐로 만드는데 그 안에 어떤 가루들이 섞여있는지 모르는 것처럼, 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후, 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미함

  • 외부 객체에서는 캡슐화된 객체의 내부 구조를 알 수 없기 때문노출시켜 준 필드 혹은 메서드를 통해 접근할 수 있다.
  • 필드와 메서드를 캡슐화하여 숨기는 이유
    : 외부 객체에서 해당 필드와 메서드를 잘못 사용하여 객체가 변화하지 않기 위해
  • Java에서는 캡슐화된 객체의 필드와 메서드를 노출시킬지, 감출지 결정하기 위해 접근 제어자를 사용

📥 상속이란?

  • 객체지향 프로그래밍에는 부모 객체자식 객체가 존재함
  • 부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려주어 자식 객체가 이를 사용할 수 있도록 만듦

상속을 하는 이유

  • 각각의 객체들을 상속 관계로 묶음으로서 객체 간의 구조 파악이 쉬워짐
  • 필드와 메서드를 변경하는 경우, 부모 객체에 있는 것만 수정하면 자식 객체전부 반영이 되기 때문에 일관성을 유지하기 좋음
  • 자식 객체부모 객체필드메서드물려받아 사용할 수 있기 때문에 코드의 중복이 줄어들면서 코드의 재사용성이 증가

🛠️ 다형성이란?

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


(설계도 관점에서 A객체와 B객체를 만들었을 때를 가정하는 이미지)

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

🖼️ 추상화란?

  • 객체에서 공통된 부분들을 모아 상위 개념 으로 새롭게 선언하는 것

  • 공통적이고 중요한 것들을 모아 객체를 모델링

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


🚗🚙 객체와 클래스

  • 객체를 생성하기 위한 설계도가 필요함
  • 현실 세계에서는 자동차를 만들기 위해 자동차 설계도를 토대로 자동차를 생산
  • 마찬가지로 소프트웨어에서도 객체를 만들기 위해서는 설계도에 해당하는 클래스가 필요

  • 클래스를 토대로 생성된 객체를 해당 클래스인스턴스 라고 부르며 이 과정을 인스턴스화 라고 부름
  • 동일한 클래스로 여러 개의 인스턴스를 만들 수 있음

✅ 기억해야할 것

클래스 : 객체를 만들기 위한 설계도

profile
전공은 컴퓨터공학, 복수전공은 해킹보안학, 직장은 방학(파워 구직중)

0개의 댓글