자바 튜토리얼

자바 홈 자바 소개 자바 시작하기 자바 구문 자바 주석 자바 변수 자바 데이터 유형 자바 타입 캐스팅 자바 연산자 자바 문자열 자바 수학 자바 부울 자바 If...Else 자바 스위치 자바 while 루프 자바 For 루프 자바 중단/계속 자바 배열

자바 메소드

자바 메소드 자바 메소드 매개변수 자바 메소드 오버로딩 자바 범위 자바 재귀

자바 클래스

자바 OOP 자바 클래스/객체 자바 클래스 속성 자바 클래스 메소드 자바 생성자 자바 수정자 자바 캡슐화 자바 패키지 / API 자바 상속 자바 다형성 자바 내부 클래스 자바 추상화 자바 인터페이스 자바 열거형 자바 사용자 입력 자바 날짜 자바 배열 목록 자바 링크드리스트 자바 해시맵 자바 해시셋 자바 반복자 자바 래퍼 클래스 자바 예외 자바 정규식 자바 스레드 자바 람다

자바 파일 처리

자바 파일 Java 파일 작성/쓰기 자바 읽기 파일 자바 삭제 파일

자바 방법

두 개의 숫자 더하기

자바 참조

자바 키워드 자바 문자열 메소드 자바 수학 메소드

자바 예제

자바 예제 자바 컴파일러 자바 연습 자바 퀴즈 자바 인증서


자바 캡슐화


캡슐화

캡슐화 의 의미는 "민감한" 데이터가 사용자에게 숨겨져 있는지 확인하는 것입니다. 이를 달성하려면 다음을 수행해야 합니다.

  • 클래스 변수/속성 선언 private
  • 변수 값에 액세스하고 업데이트하기 위한 공개 getset 메소드 제공private

가져오기 및 설정

private이전 장에서 변수는 동일한 클래스 내에서만 액세스할 수 있음 을 배웠습니다 (외부 클래스에서는 액세스할 수 없음). 그러나 공개 getset 메서드 를 제공하면 액세스할 수 있습니다 .

메서드 는 get변수 값을 반환하고 set메서드는 값을 설정합니다.

둘 다의 구문은 get또는 set로 시작하고 그 뒤에 변수 이름이 오고 첫 글자는 대문자로 표시됩니다.

예시

public class Person {
  private String name; // private = restricted access

  // Getter
  public String getName() {
    return name;
  }

  // Setter
  public void setName(String newName) {
    this.name = newName;
  }
}

설명된 예

get메서드는 변수의 값을 반환합니다 name.

set메서드는 매개변수( newName)를 가져와 변수에 할당합니다 name. this키워드는 현재 개체를 참조하는 데 사용됩니다 .

그러나 name변수가 로 선언 되었으므로 이 클래스 외부에서 액세스할 private없습니다 .

예시

public class Main {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.name = "John";  // error
    System.out.println(myObj.name); // error 
  }
}

변수가 로 선언된 public경우 다음 출력이 예상됩니다.

John

private그러나 변수 에 액세스하려고 하면 오류가 발생합니다.

MyClass.java:4: error: name has private access in Person
    myObj.name = "John";
         ^
MyClass.java:5: error: name has private access in Person
    System.out.println(myObj.name);
                  ^
2 errors

대신 getName()setName()메서드를 사용하여 변수에 액세스하고 업데이트합니다.

예시

public class Main {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.setName("John"); // Set the value of the name variable to "John"
    System.out.println(myObj.getName());
  }
}

// Outputs "John"


왜 캡슐화인가?

  • 클래스 속성 및 메서드에 대한 더 나은 제어
  • 클래스 속성은 읽기 전용 (메소드만 사용하는 경우 get) 또는 쓰기 전용 ( set메소드 만 사용하는 경우)으로 설정할 수 있습니다.
  • 유연성: 프로그래머는 다른 부분에 영향을 주지 않고 코드의 한 부분을 변경할 수 있습니다.
  • 데이터 보안 강화