| English | 의미 |
|---|---|
| encapsulation/ɪnˌkæpsjʊˈleɪʃn/ | 포장 |
| instance variables/ˈɪnstəns ˈveərɪəblz/ | 인스턴스 변수 |
-private 필드에도 검증 메소드가 필요합니다
- Student에는 private score가 있지만,
public void setScore(int s) { score = s; }은 여전히 caller에게 -5을 공급할 수 있게 합니다. 단순한 접근 제한(access restriction)만으로 음수가 아닌 점수를 강제할 수 없습니다. - 보호된 setter(guarded setter)는 해당 업데이트를 거부할 수 있습니다. 컨스투クター(constructor)과 해당 필드에 쓰는 모든 다른 메소드도 확인하십시오. 인캡슐(encapsulation)은 검증 정책을 강화하기 쉽게 하지만 자동으로 만들어주지는 않습니다.
score를 private으로 설정하면, 보호되지 않은 public 세터에 제공되는 음수 인수를 자동으로 거부합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
거짓: 세터는 클래스 코드이므로 음수 값을 할당할 수 있습니다. 검증 로직이 구현되어야 합니다.
클래스의 세 가지 구성 요소
- 여기의 클래스 설계는 데이터용 인스턴스 필드, 초기 설정용 컨스투커터, 그리고 behavior용 메소드를 포함합니다. 이를 식별할 수 있는 세 가지 유용한部分组成입니다. 형식적으로 Java는 컨스투커터를 클래스 멤버로 분류하지 않습니다.
- 컨스투커터에서 업데이트까지 Student를 추적해 보십시오: 컨스투커터는 score 필드를 초기화하고, 인스턴스 메소드는 나중에 해당 객체의 score를 읽거나 변경합니다. 대신 스태틱 메소드는 암묵적 현재 객체(current object)가 없습니다.
인스턴스 변수는 상태를 저장합니다
- 인스턴스 변수는 각 객체의 고유한 상태를 저장합니다.
private String name; private int score;— 클래스 내부에, 어떤 메서드 외부에 선언됩니다.- 각 객체는 고유한 복사본을 가집니다 — 한 학생의
score은 다른 학생의它与Separate합니다. - 이 변수들은 객체의 수명 동안 지속됩니다 (로컬 변수와 다름).
private과 public
- 접근 modifier는谁能访问成员。
private— 클래스 내부에서만 사용 가능;public— 해당 클래스에 접근할 수 있는 다른 코드에 노출됨.- 인스턴스 변수는 일반적으로 **
private**이며, 인터페이스를 형성하는 메서드는 **public**입니다. - 내부 데이터를 숨기는 이 방식은 encapsulation(포장)이라고 합니다.
여기서 가르치는 Student 클래스 설계의 세 가지 구성 요소는 무엇입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
인스턴스 필드는 상태를 유지하고, 생성자는 새로운 객체를 초기화하며, 메소드는 동작을 제공합니다. Java 용어에서 생성자는 공식적으로 class 멤버가 아닙니다.
인스턴스 변수는 일반적으로 선언됩니다...
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
개인 데이터 + public 메서드 = 캡슐화(encapsulation).
데이터를 개인으로 유지하고 메서드를 통해만 노출시키는 것을 ___ (한 단어)라고 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
캡슐화는 객체의 데이터를 보호합니다.
같은 클래스의 두 객체는 각 인스턴스 변수의 한 개의 사본을 공유합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
각 객체는 인스턴스 변수의 자체 사본을 가집니다.
여기에 표시된 최상위 Student 클래스에 대해, 관련이 없는 외부 클래스는 private 필드를 직접 읽을 수 있습니다...
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
private 접근 권한은 관련이 없는 외부 클래스가 해당 필드를 직접 읽지 못하게 합니다. Student 내부의 코드에서는 다른 Student 객체의 private 필드를 읽을 수 있습니다.
왜 데이터를私有로 유지해야 하는가
- 인캡슐(encapsulation)은 무관한 외부 코드가 직접 private 필드에 할당하는 것을 방지합니다. Student 내부의 코드는 다른 명시적으로 참조된 Student의 필드—including private fields—를 여전히 읽거나 쓸 수 있습니다.
- 외부에서는 오직 public 메서드를 통해 상호작용하며, 이는 검증 및 접근 제어를 할 수 있습니다.
- 메서드 내에서 음의 점수를 거절할 수 있지만, public 변수에는 그러한 방어가 없습니다.
- 의도적으로 선택한 public 인터페이스를 가진 private 필드는 통제된 업데이트를 지원합니다. 각 메소드와 컨스투커터는 여전히 의도된 규칙을 구현해야 하며, 가변(mutable) 내부 객체를 반환하는 것도 간접적으로 변경 사항을 노출시킬 수 있습니다.
인스턴스 변수 private를 유지하고; public 메서드를 통해 기능을 노출하십시오. public 필드는 검증 없이 어떤 코드든 이를 부正수 점수, null 이름 등) 임의의 값으로 설정할 수 있습니다. encapsulation은 모든 접근을 변경 사항을 검증할 수 있는 메서드를 통해 집중시킵니다. 각 객체는 개별 인스턴스 필드 저장 공간을 가지만, 다른 객체의 참조 필드는 동일한 공유 객체를 가리킬 수 있습니다. 개별 필드와 개별 참조 객체를 구분하십시오.
두 객체는 각기 다른 참조 필드를持有하므로, 그 필드들은 서로 다른 객체를 가리켜야 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
거짓: 각기 다른 참조 필드들이 모두 동일한 가변 객체를 가리킬 수 있습니다.
두 학생이 같은 초기 빈 ArrayList를 공유하고 있습니다. 한 명이 항목을 하나 추가했습니다. 다른 학생이 관찰하는 리스트 크기는 무엇입니까?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
두 참조는 모두 크기가 이제 1인 같은 리스트 객체를 가리킵니다.
A Student class anatomy:
- Instance variables:
private String name; private int score; - Constructor:
public Student(String n) { ... } - Methods:
public void addScore(int s) { ... },public int getScore() { ... }
개별 필드 저장 공간과 공유 객체 분리
- 두 Student 객체가 동일한 ArrayList에 대한 참조를 모두 저장하면, Defaults list 필드는 개별적이지만 참조되는 List는 공유됩니다. 어느 쪽의 참조를 통해 항목을 추가하더라도 그 하나의 List가 변경됩니다.
- 한 학생의 list 필드를 새로운 ArrayList로 재할당하면 해당 필드만 변경됩니다. 상태 예측 시 참조 화살표를 따르십시오; private 접근 및 객체 정체성은 서로 다른 질문들에 답변합니다.
A class는 instance variables(각 객체의 state), constructors(새 객체 설정), 및 methods(기능)를 가집니다. instance variables는 일반적으로 **private**이며 public methods를 통해 접근됩니다 — 이 encapsulation이 데이터를 보호합니다. 각 객체는 개별 인스턴스 필드를 보유하지만, 해당 필드에 의해 참조된 객체들은 여전히 공유될 수 있습니다.
각 객체는 자체 상태(state)를 가짐
a.score와 b.score는 분리되어 있으며, 각 객체가 자신의 상태를 소유함.