본문 바로가기
개발/Java

정보 은닉

by BellOne4222 2024. 1. 28.

정보 은닉


정보 은닉 : 다른 객체에게 자신의 정보를 숨기고 자신의 동작, 기능, 연산을 통해 접근을 하는 것으로 클래스 외부에서 특정 정보에 접근을 막는다는 의미

 

  • setter, getter 메서드

 

this는 자기 자신이 가지고 있는 정보를 가리킬 때 사용

private String name;
    private int age;
    private String phone;

    public PersonVO(){

    }

    public String getName() { // getter 메서드로 값을 얻어오고 get + 멤버 변수의 첫 영문을 대문자로 만들기
        return name;
    }

    public void setName(String name) { // this.name 반환
        this.name = name; // setter 메서드로 값을 저장하고 set + 멤버 변수의 첫 영문을 대문자로 설정
    }

public class SetterGetterTest {
    public static void main(String[] args) {
        // Q. setter, getter 메서드를 통해 PersonVO객체에 이름, 나이, 전화번호를 저장하고 출력하세요
        PersonVO vo=new PersonVO();
        //vo.name="홍길동";
        vo.setName("홍길동");
        vo.setAge(50);
        vo.setPhone("010-1111-1111");
        System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
    }

}
  • 생성자 메서드

 

public PersonVO(){
        // 객체를 생성하는 코드는 내부에서 만들어진다.
        // 객체의 초기화를 한다.
        this.name = "홍길동";
        this.age = 50;
        this.phone = "010-1234-5678";
    }
  • 개발자가 원하는 값으로 초기화를 하는 방법? : 생성자 메서드를 오버로딩해서 초기화

 

// 생성자의 오버로딩 -> 내가 원하는 값으로 초기화, 기본 생성자는 지우면 안된다.
    public PersonVO(String name, int age, String phone){ // 생성자 오버로딩해서 초기화
        this.name=name;
        this.age=age;
        this.phone=phone;
    }

public class ConstructorOverloading {
    public static void main(String[] args) {
        // Q. 생성자 메서드를 통해 PersonVO객체에 원하는 이름, 나이, 전화번호를 저장하고 출력하세요
        PersonVO vo=new PersonVO("홍길동", 34,"010-5555-5555");
        PersonVO vo1=new PersonVO("나길동", 60,"010-2222-2222");
        PersonVO vo2=new PersonVO("조길동", 50,"010-3333-3333");
        System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
        System.out.println(vo1.getName()+"\t"+vo1.getAge()+"\t"+vo1.getPhone());
        System.out.println(vo2.getName()+"\t"+vo2.getAge()+"\t"+vo2.getPhone());
    }
}
  • toString() : 객체 값 출력하기 → getter를 여러개 쓰지말고 효율적으로 데이터 가져오기

 

public String toString(){
        return name+"\t"+age+"\t"+phone;
    }

// getter를 여러번 쓰지 않고 한번에 toString 메서드로 출력
public class ToStringPrint { 
    public static void main(String[] args) {
        PersonVO vo = new PersonVO("홍길동", 34,"010-5555-5555");
        System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
        System.out.println(vo.toString());
        System.out.println(vo); // toString() 생략가능(객체가 가진 전체 데이터를 출력하라는 것으로 컴파일러가 인식)
    }
}
  • VO 클래스 설계

 

// Generator를 사용해서 모두 생성가능(alt + insert)

package fc.java.model;

public class MovieVO {

    // 1. 모든 생태정보를 정보은닉 하기(private)
    private String title;
    private int day;
    private String major;
    private String part;
    private float time;
    private int level;

    // 2. 디폴트 생성자 만들기
    public MovieVO() {
    }

    // 3. 생성자 메서드를 오버로딩하여 객체 초기화 하기
    public MovieVO(String title, int day, String major, String part, float time, int level) {
        this.title = title;
        this.day = day;
        this.major = major;
        this.part = part;
        this.time = time;
        this.level = level;
    }

    // 4. setter 메서드를 만들기(값을 저장용도)
    // 5. getter 메서드를 만들기(값을 얻기 용도)
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getPart() {
        return part;
    }

    public void setPart(String part) {
        this.part = part;
    }

    public float getTime() {
        return time;
    }

    public void setTime(float time) {
        this.time = time;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    // 6. toString()메서드를 만들기(객체가 가지고 있는 전체 값 출력 용도)
    @Override
    public String toString() {
        return "MovieVO{" +
            "title='" + title + '\'' +
            ", day=" + day +
            ", major='" + major + '\'' +
            ", part='" + part + '\'' +
            ", time=" + time +
            ", level=" + level +
            '}';
    }
}

public class BestVOModeling {
    public static void main(String[] args) {
        // Q. 형태로 잘 설계된 영화(MovieVO) 객체를 설계하고 데이터를 저장 한 후 출력하세요
        MovieVO vo=new MovieVO("아바타",20221214,"제이크 설리","액션",192.0f,12);
        System.out.println(vo.toString());
        System.out.println(vo.getLevel());
    }

}

 

정보 은닉 ⇒ private 사용,

'개발 > Java' 카테고리의 다른 글

Static  (0) 2024.01.28
배열과 클래스의 관계  (0) 2024.01.28
패키지(Pakage)  (0) 2024.01.28
모델(Model)  (0) 2024.01.28
클래스(Class)  (1) 2024.01.28