- 정보 은닉화
- 코드 보완성 증가
- 코드 유지보수성 증가
- 캡슐화 실천
2. 접근 제어자
제어자
|
같은 클래스
|
같은 패키지
|
자손 클래스
|
전체
|
public
|
O
|
O
|
O
|
O
|
protected
|
O
|
O
|
O
|
|
default
|
O
|
O
|
|
|
private
|
O
|
|
|
|
package exercise.chapter_27.packageOne;
public class ClassA {
public String publicStr;
String defaultStr; // default 는 따로 앞에 안적음
private String privateStr;
void methodDefault() {
}
public void methodPublic() {
}
private void methodPrivate() {
}
void testPrivate() {
String str = privateStr; //사용 가능
methodPrivate();
}
}
package exercise.chapter_27.packageOne;
public class ClassAA {
void testPublic(ClassA classA) {
String str = classA.publicStr; //같은 패키지에서는 public 접근 가능
classA.methodPublic();
}
void testPrivate(ClassA classA) {
String str = classA.privateStr; //같은 패키지이지만 private이라 접근 불가
classA.methodPrivate();
}
void testDefault(ClassA classA) {
String str = classA.defaultStr; //같은 패키지에서는 default 접근 가능
classA.methodDefault();
}
}
package exercise.chapter_27.packageTwo;
import exercise.chapter_27.packageOne.ClassA;
public class ClassB {
public void testPublic(ClassA classA) {
String str = classA.publicStr;
classA.methodPublic();
}
public void testPrivate(ClassA classA) {
String str = classA.privateStr; // private 접근 불가
classA.methodPrivate();
}
public void testDafault(ClassA classA) {
String str = classA.defaultStr; //다른 패키지에서 default 접근 불가
classA.methodDefault();
}
}
3. 필드 접근자 메소드 : getter / setter, private 변수에 접근하는 방법
package exercise.chapter_27;
public class Subject {
private String subjectName;
private String subjectCode;
//setter
void setSubjectName(String pSubjectName) {
subjectName = pSubjectName;
}
void setSubjectCode(String pSubjectCode) {
subjectCode = pSubjectCode;
}
}
package exercise.chapter_27;
public class Student {
private String schoolName;
private int classYear;
private int classroomNumbers;
private int studentNumber;
private String name;
private String gender;
...
//getter
public String getName() {
return name;
}
}
- this 사용법
- 클래스 자체의 변수를 가리키는 것이 아닌 클래스를 통해 인스턴스화 된 객체의 변수를 가리키는 것임.
- this는 인스턴스 자신의 생성주소를 알려준다.
package exercise.chapter_28;
public class Person {
private String name;
private String gender;
private int age;
...
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
}
2. this로 개선하기
//BEFORE
Student(String pSchoolName, int pClassYear, int pClassroomNumbers, int pStudentNumber, String pName, String pGender) {
schoolName = pSchoolName;
classYear = pClassYear;
classroomNumbers = pClassroomNumbers;
studentNumber = pStudentNumber;
name = pName;
gender = pGender;
}
//AFTER
Student(String schoolName, int classYear, int classroomNumbers, int studentNumber, String name, String gender) {
this.schoolName = schoolName;
this.classYear = classYear;
this.classroomNumbers = classroomNumbers;
this.studentNumber = studentNumber;
this.name = name;
this.gender = gender;
}