반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

웹풀스택 공부 중

14 - 3. Java의 OOP 문법 - Encapsulation + Inheritence 본문

웹개발/Java

14 - 3. Java의 OOP 문법 - Encapsulation + Inheritence

lukeit 2024. 11. 4. 13:03

OOP (Object Oriented Programming): 객체 지향 프로그래밍

  • OOP의 핵심 개념:
    • 캡슐화 (Encapsulation): 최대한 감추고 최소한의 Method만 노출하자
      • Field를 최대한 감추자
    • 상속 (Inheritance): 확장
    • 추상화 (Abstraction): Interface + Abstract Class
    • 다형성 (Polymorphism): Class의 다형성 + Interface의 다형성

Class (캡슐화 + 상속)

  • Class = Data + Action
    • Data: Field or Attribute
      • 내부로 감춰야하는 상황에서는 내부 Method에서만 해당 데이터를 사용한다
      • 외부로 노출되어야하는 상황에서는 Getter를 사용하여, 특정 포멧을 적용하거나 필요 정보만 변환하여 노출한다
        • 이유) 필드 노출 시 자체 변경이 가능하기 때문이다
    • Action: Method - 위 데이터에 대한 접근이나 조작, 데이터를 사용한 작업 수행
      • 내부로 감춰야하는 상황: 내부 Method에서만 호출되는 경우
      • 외부로 노출되어야하는 상황: 외부에서 호출이 되어야하는 경우

Encapsulation (캡슐화):

  • 최대한 필드를 감추고, 필드 조작을 위한 메서드는 최소한만 노출하겠다
  • OOP를 얼마나 잘하는가? = 얼마나 클래스 (독립된 시스템 구축)을 잘 만드는가?
  • 클래스를 사용하는 이유: Encapsulation을 위해
    • 단순히 감추는게 아닌, 독립된 시스템을 구축하기 위함
  • 접근제어자를 통해 Encapsulation이 가능하다
    • Public: 어디에서든 접근 가능
    • Private: 동일한 클래스 내에서만 접근 가능
      • 같은 Top Class 기준으로 같이 있다면 사용이 가능하다
    • Protected: 상속한 자식들은 접근 가능
      • Abstract Class에서 자주 사용한다
    • Default: 위에 것들이 아니라면 Default이다
      • 같은 Package에 있다면 접근이 가능하다
    • 사용방법:
      • 일반적으로 모든 필드를 Private으로 감춰두고, 그 이후 선택적 필요에 따라
        1. 특정 필드의 노출이 필요하다면 Getter 함수를 Public으로 만들어서 노출
        2. 특정 필드의 수정이 필요하다면 Getter 함수를 Public으로 만들어서 노출
        3. 필드들을 활용한 연산이 필요하다면 원하는 함수를 Public으로 만들어서 노출

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