카테고리 없음

2024. 7. 2. (화) 슈퍼코딩 부트캠프 Day 26 / 주특기 2주차

태영9922 2024. 7. 2. 18:16

 

  1. 정보 은닉화

- 코드 보완성 증가

- 코드 유지보수성 증가

- 캡슐화 실천

 

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;
    }
}
 

 

 

  1. 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;
    }