웹풀스택 공부 중
14 - 3. Java의 OOP 문법 - Encapsulation + Inheritence 본문
OOP (Object Oriented Programming): 객체 지향 프로그래밍
- OOP의 핵심 개념:
- 캡슐화 (Encapsulation): 최대한 감추고 최소한의 Method만 노출하자
- Field를 최대한 감추자
- 상속 (Inheritance): 확장
- 추상화 (Abstraction): Interface + Abstract Class
- 다형성 (Polymorphism): Class의 다형성 + Interface의 다형성
- 캡슐화 (Encapsulation): 최대한 감추고 최소한의 Method만 노출하자
Class (캡슐화 + 상속)
- Class = Data + Action
- Data: Field or Attribute
- 내부로 감춰야하는 상황에서는 내부 Method에서만 해당 데이터를 사용한다
- 외부로 노출되어야하는 상황에서는 Getter를 사용하여, 특정 포멧을 적용하거나 필요 정보만 변환하여 노출한다
- 이유) 필드 노출 시 자체 변경이 가능하기 때문이다
- Action: Method - 위 데이터에 대한 접근이나 조작, 데이터를 사용한 작업 수행
- 내부로 감춰야하는 상황: 내부 Method에서만 호출되는 경우
- 외부로 노출되어야하는 상황: 외부에서 호출이 되어야하는 경우
- Data: Field or Attribute
Encapsulation (캡슐화):
- 최대한 필드를 감추고, 필드 조작을 위한 메서드는 최소한만 노출하겠다
- OOP를 얼마나 잘하는가? = 얼마나 클래스 (독립된 시스템 구축)을 잘 만드는가?
- 클래스를 사용하는 이유: Encapsulation을 위해
- 단순히 감추는게 아닌, 독립된 시스템을 구축하기 위함
- 접근제어자를 통해 Encapsulation이 가능하다
- Public: 어디에서든 접근 가능
- Private: 동일한 클래스 내에서만 접근 가능
- 같은 Top Class 기준으로 같이 있다면 사용이 가능하다
- Protected: 상속한 자식들은 접근 가능
- Abstract Class에서 자주 사용한다
- Default: 위에 것들이 아니라면 Default이다
- 같은 Package에 있다면 접근이 가능하다
- 사용방법:
- 일반적으로 모든 필드를 Private으로 감춰두고, 그 이후 선택적 필요에 따라
- 특정 필드의 노출이 필요하다면 Getter 함수를 Public으로 만들어서 노출
- 특정 필드의 수정이 필요하다면 Getter 함수를 Public으로 만들어서 노출
- 필드들을 활용한 연산이 필요하다면 원하는 함수를 Public으로 만들어서 노출
- 일반적으로 모든 필드를 Private으로 감춰두고, 그 이후 선택적 필요에 따라
Inheritence (상속):
- 사용 이유) 캡슐화를 그대로 유지하면서 데이터나 행위를 확장하기 위함
- 상속 시 문제
- 갖고 싶지 않은 필드와 메서드를 가질 수 밖에 없다
- 사용하지 않는 필드와 메서드까지 호출될 수 밖에 없다
- 부모에 조작이 들어가면 모든 자식이 변경된다
- 위 상기한 문제들 때문에 Composition (조합)이 더 활용성이 높다
- 조합: 기존의 캡슐화를 한번 더 감싸서 새로운 캡슐화를 하는 것
- 이후에 다룰 예정
반응형
'웹개발 > Java' 카테고리의 다른 글
15 - 1. Java - Lombok (0) | 2024.11.04 |
---|---|
14 - 5. Java - Builder & 정적 팩토리 메서드 (1) | 2024.11.04 |
14 - 4. Java - Object 생성자 (0) | 2024.11.04 |
14 - 2. Java - JVM (0) | 2024.11.04 |
14 - 1. Java Exception (0) | 2024.10.31 |