English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 강의

Java 프로세스 제어

Java 배열

Java 오브젝트-oriented(I)

Java 오브젝트-oriented(II)

Java 오브젝트-oriented(III)

Java 예외 처리

Java 리스트(List)

Java Queue(큐)

Java Map 셋

Java Set 셋

Java 입력 출력(I/O)

Java Reader/Writer

Java 다른 주제

Java 추상화

이 튜토리얼에서는 예제를 통해 Java의 감싸기와 데이터 숨기기를 배웁니다.

Java 추상화

감싸기는 오브젝트-oriented 프로그래밍의 중요한 기능 중 하나입니다. 감싸기는 필드와 메서드를 단일 클래스에 연결하는 것을 의미합니다.

클래스 내의 유사 필드와 메서드를 묶어 데이터를 숨기는 데도 도움이 됩니다.

필드와 메서드 감싸기

일반적으로, 감싸기는 코드를 한 곳에 껴서 만드는 과정입니다.

Java에서는 하나의 클래스 안에 함께 작업할 필드와 메서드를 묶을 수 있습니다. 예를 들어,

class Rectangle {
   int length;
   int breadth;
   public void getArea() {}
}

위 프로그램에서 getArea() 메서드는 사각형의 면적을 계산합니다. 면적을 계산하기 위해 길이(length)와 너비(breadth)가 필요합니다. 따라서 데이터 필드 length, breadth 및 메서드 getArea()는 Rectangle 클래스에 위치합니다.

Java 데이터 숨기기

데이터 숨기기는 데이터 구현 세부 사항을 숨기며 데이터 멤버 접근을 제한하는 방법입니다.

데이터 숨기기는 또한 데이터를 숨기는 방법을 제공합니다.

데이터 숨기기는 접근 지정자를 통해 이루어집니다. Java에서는 네 가지 접근 지정자가 있습니다:

  • public - 데이터나 메서드가 공개적이면, 어디서든 접근할 수 있습니다. 기본적으로 모든 데이터와 메서드는 public입니다.

  • private - 데이터나 메서드가 사적이면, 그 클래스의 외부에서 접근할 수 없습니다.

  • protected - 지정된 속성이나 메서드는 protected로 지정되어 있으며, private와 유사하지만 서브 클래스에서도 접근할 수 있는 차이가 있습니다

  • default - 즉, 접근자 없이, 일반적으로 "기본 접근 모드"라고 불립니다. 이 모드에서는 같은 패키지에서만 접근이 허용됩니다.

자세한 정보를 얻으려면 방문해 주세요Java 접근 제한자

예제1:private 데이터 숨기기

class Person {
   private int age;
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
}
class Main {
   public static void main(String[] args) {
      Person p1 = new Person();
      p1.setAge(24);
      System.out.println("저의 나이는 " + p1.getAge());
   }
}

출력 결과

저의 나이는 24

위 예제에서는 private 필드 age가 있습니다. 그것이 private인 이유로 외부에서 접근할 수 없습니다. age에 접근하기 위해 공공 메서드 getAge()와 setAge()를 사용했습니다. 이 메서드들은 getter와 setter 메서드라고 합니다.

Main 클래스에서 age 필드에 접근하려고 시도하면 오류 메시지가 나타납니다.

p1.age = 24;     // error: age has private access in Person

age를 private로 설정하면 클래스 외부에서 인가 없이 접근할 수 없게 됩니다. 이는 데이터 숨기기입니다.

예제2:protected 데이터 숨기기

class Person {
 protected String profession;
 protected void displayInfo() {
   System.out.println("I am a " + profession);
 }
}
class Teacher extends Person {
   public static void main(String[] args) {
      Teacher t1 = new Teacher();
      t1.profession = "teacher";
      t1.displayInfo();
   }
}

출력 결과

I am a teacher

위 프로그램에서는 Person 클래스를 생성했습니다. 이 클래스에는 protected 필드 profession과 protected 메서드 displayInfo()가 포함되어 있습니다.

저희는 Teacher 클래스(Person의 서브 클래스)에서 이 멤버에 접근했습니다.

포장의 필요성은 무엇인가요?

  • Java에서는, 포장이 관련 필드와 메서드를 함께 유지하는 데 도움이 되어 코드가 더 정리되고 읽기 쉬워집니다.

  • 이는 우리의 데이터 필드의 수정을 제어하는 데 도움이 됩니다. 고려해 보면, 클래스 내의 age 필드가 비음수가 되기를 원하는 경우를 생각해 보세요. 여기서 age를 private로 설정하고 setAge() 메서드 내에서 로직을 적용할 수 있습니다. 예를 들어,

class Person {
   private int age;
   public void setAge(int age) {
     if (age >= 0) {
        this.age = age;
     }
   }
}
  • getter와 setter 메서드는 우리의 클래스 필드에 읽기 전용 또는 쓰기 전용 접근을 제공합니다. 예를 들어:

getName()   // 쓰기 전용 접근 제공
setName()   //읽기 전용 접근 제공
  • 이는 시스템의 구성 요소를 얽박지 않도록 도와줍니다. 이러한 얽박지 않은 구성 요소는 독립적으로 동시에 개발, 테스트 및 디버깅할 수 있습니다. 그리고 특정 구성 요소의 어떤 변경도 다른 구성 요소에 영향을 미치지 않습니다.

데이터 숨기기와 포장

사람들은 일반적으로 포장이 데이터 숨기기라고 생각하지만, 이는 완전히 정확하지 않습니다.

포장은 관련 필드와 메서드를 함께 묶는 것입니다.이것은 우리가 데이터 숨기기를 구현할 수 있게 합니다.포장은 데이터 숨기기가 아니라는 것입니다.