■ 객체 지향 프로그래밍
- 자바는 객체지향 프로그래밍(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이라는 예약어가 붙으면 그 변수는 클래스 변수가 된다
■ 객체의 라이프 사이클
- 객체는 생성하고 소멸할 때까지의 라이프 사이클을 갖는다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 접근 지정자(Accessor) (0) | 2024.01.23 |
---|---|
[Java] 메소드 / 메소드 오버로딩 (0) | 2024.01.22 |
[Java] 배열의 복사 (Deep Copy vs Swallow Copy) (0) | 2024.01.22 |
[Java] 다차원 배열 (0) | 2024.01.19 |
[Java] 객체 배열 (0) | 2024.01.18 |