프로그래밍 언어/Java

[Java] 객체

eunnys 2024. 1. 22. 11:24

객체 지향 프로그래밍

  • 자바는 객체지향 프로그래밍(OOP)언어이다.
  • 추상화(Abstraction), 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)의 특징
  • 이러한 특징은 코드의 재사용성이나 유지보수 등의 장점을 갖게 한다.

 

 

 

객체

  • 실제 세계에 조재하는 상태와 행동방식을 가진 모든 것
  • 모든 객체는 속성과 행동방식으로 표현될 수 있다.
  • 객체(object)란 실제 세계에 존재하는 상태와 행동방식을 가진 모든 것을 의미

 

 


 

클래스(Class)

  • 객체를 만들기 위한 설계도, 틀
  • 데이터와 행동방식을 포함하고 있다.

 

 

 

객체(Object)

  • 클래스로 만들어진 세상
  • 구체적 값이 전달되어 메모리 공간을 할당 받아 적재된 상태

 


 

추상화란?

  • 현실 세계의 사물이나 개념에서 공통된 속성과 기능을 추출하여 객체로 표현하는 것
  • 추상화를 잘 활용하면 프로그램의 복잡서을 줄이고, 유지보수성을 높일 수 있다.
  • 프로그램의 재사용성을 높이고, 새로운 기능을 추가하기 쉽게 만들 수 있다.

 

 

 

 추상화의 종류

 

    ① 데이터 추상화

          객체의 복잡한 데이터를 단순한 형태로 추출하여 표현.

          예를 들어, 제품을 표현하는 클래스에서 제품의 이름, 가격, 제조사 등과 같은 속성을 추출하여 표현할 수 있다.

    ② 기능 추상화

         객체의 기능을 하나의 메소드로 추출하여 표현.

         예를 들어, 제품을 생성하거나 수정하는 기능을 하나의 메소드로 추출하여 표현할 수 있다.

 

 


 

OOP의 캡슐화

  • 서로 관련 있는 데이터와 이를 처리할 수 있는 기능들을 하나로 묶어 관리하는 것
  • 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이털르 외부로부터 보호하는 것
  • 캡슐화를 하면 객체의 속성과 메서드를 하나의 단위로 묶어 객체 내부의 데이터에 접근을 제어하여 정보를 은닉할 수 있다.
  • 캡슐화를 통해 객체의 내부 구현 정보를 숨기고, 객체 간의 결합도를 낮춤으로써 코드의 유지보수성과 재사용성을 향상시킬 수 잇다.
  • 캡슐화를 통해 외부에서 객체의 상태를 직접 접근할 수 없기 때문에 객체의 내부 상태가 불변하게 유지된다.
  • 이로 인해 예기치 않은 상태 변경을 방지할 수 있으며, 코드의 안정성을 높일 수 있다. 또한, 객체의 내부 구현을 숨길 수 있어 객체 간의 결합도를 낮추고, 코드의 재사용성을 높일 수 있다.
  • 자바 객체 지향 프로그래밍에서 이렇게 캡슐화를 하는 이유
    • 데이터 보호(data protection) – 외부로부터 클래스에 정의된 속성과 기능들을 보호
    • 데이터 은닉(data hiding) – 내부의 동작을 감추고 외부에는 필요한 부분만 노출

 

 

 

정보 은닉(Hiding)

  • 클래스 내부 구현을 숨기고 사용자에게는 인터페이스 만을 제공해 주는 것
  • 데이터를 신뢰성 있게 관리하고 오류를 최소화할 수 있게 된다.
  • 클래스와 멤버변수, 멤버 메소드의 앞에 앞에 접근 지정자를 지정하여 은닉을 할 수 있으며 일반적으로 멤버변수는 private로, 메소드 앞에 public을 지정하여 정보를 은닉할 수 있다.

 

 

 

 정보 은닉 구현 방법

  • 접근 제어자(access modifier): 클래스의 속성과 메서드에 접근할 수 있는 범위를 지정하는 키워드

          ① public : 모든 클래스 및 외부 패키지에서 접근

          ② protected : 같은 패키지 내의 클래스와 하위 클래스에서 접근

          ③ default : 같은 패키지의 클래스에서만 접근

          ④ private : 같은 클래스에서만 접근

 

 

 

 

 

상속(inheritance)

  • 클래스가 다른 클래스의 속성과 행동방식을 물려받아 구현하는 것
  • 상속을 받아 새로 만들어지는 클래스는 자식 클래스(sub class)가 되고 멤버들을 상속해주는 클래스를 부모 클래스(super class)라고 한다.
  • 객체지향 프로그래밍에서 코드의 재사용성과 확장성을 높임으로써 프로그램의 유지보수를 좀 더 쉽게 해준다

 

 

 

다향성

  • '많은 형태를 가지고 있다.' 라는 뜻
  • 클래스의 사용에 있어 일관성을 줄 수 있는 특징이 있음
  • 메소드 오버라이딩(method overriding)
  • 메소드 오버로딩(method overloading)

 

 

 

클래스의 구조

 

 

 

 

객체 생성 및 사용 방법

  • 선언 및 초기화

 

  • 필드(변수) 호출

 

  • 메소드 호출

 

 

 

 

 

 

변수의 종류

  • 멤버(member) 변수
    • 필드, 인스턴스 변수라고도 한다. 멤버 변수는 클래스 안에서 선언된 변수
  • 지역(local) 변수
    • 메소드 안에서 선언된 변수, 사용하기 전에 반드시 초기화를 해야 한다
  • 클래스(class) 변수
    • 멤버 변수 앞에 static이라는 예약어가 붙으면 그 변수는 클래스 변수가 된다

 

 

 

 

 

객체의 라이프 사이클

  • 객체는 생성하고 소멸할 때까지의 라이프 사이클을 갖는다.