[Java] OOP의 구성요소

date:

Updated:


Categories:

Tags:

OOP의 3요소

캡슐화(Encapsulation)

  • 정의 : 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것
  • 특징 : 외부객체는 캡슐화가 적용된 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.

예시

public class Student {
  private int id;
  private String grade;

  public int getID(){
    return id;
  }

  public String getGrade(){
    if(grade < 30) return 'D';
    else if(grade < 50 && grade >= 30) return 'C';
    else if(grade < 70 && grade >= 50) return 'B';
    else if(grade < 100 && grade >= 70) return 'A';
  }
}

public class StudentExample {
  Student student = new Student();

  // initialize student

  student.grade = 10;
  student.getGrade();
}

예시를 통해 왜 필드와 메소드를 캡슐화하여 보호하는지 알아보자.
먼저, Student class는 getGrade를 메소드를 노출시키지만, grade 멤버 변수는 노출시키지 않는다.
학생의 성적을 어느 객체든지 수정할 수 있으면, 그 학생의 성적 정보가 보호받지 못하는 것이다.
그러나 학생의 성적이 얼마인지 알아내는 것은 외부 객체에게 필요한 기능이기 때문에 public 접근 제한자로 설정해 외부객체에서 호출 할 수 있도록 만들어준 것이다.

이런식으로 캡슐화된 멤버를 노출시킬 것인지, 숨길 것인지는 접근 제한자(Access Modifier)를 사용해 결정한다.
접근 제한자는 객체의 필드와 메소드의 사용 범위를 제한함으로써 외부로부터 보호한다.

상속(Inheritance)

  • 정의 : 부모역할의 상위 객체가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있게 하는 것
  • 특징 : 상위 객체를 재사용해서 하위 객체를 쉽고 빨리 설계할 수 있도록 하고, 반복된 코드의 중복을 줄여준다.

상속시에는 메소드 오버라이딩(method overriding)을 통해서 하위 클래스에서 메소드 수정이 가능하다.

다형성(Polymorphism)

  • 정의 : 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 하는 것
  • 특징 : 자바의 경우 다형성을 위해 부모 타입에 모든 자식 객체가 대입될 수 있고, 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다.

Leave a comment