데이터 은닉

Byeonghyeon Kim·2021년 6월 8일
0

자바

목록 보기
13/20
post-thumbnail

데이터 은닉

  • 객체가 가지고 있는 데이터를 외부로 변질되지 않게 보호하는 방법

public 사용의 문제점

  • 클래스 외부에서 접근해서 클래스의 멤버 변수(속성)을 변경할 수 있음
  • private을 사용해서 막을 수 있음

멤버 변수의 private 설정

  • public 속성의 객체는 외부로부터 데이터가 변질될 수 있음
  • private 속성의 객체는 이를 막아서 데이터의 변질을 막을 수 있음
// main

package testPjt3;

public class MainClass {

	public static void main(String[] args) {
		// 객체의 아규먼트의 속성이 private이므로 처음 설정한 후 수정 불가
		Student student1 = new Student("홍길동", 90);
		student1.getIn();
		
	}
	
}
//student

package testPjt3;

public class Student {
	// 이렇게 public이 아닌 private으로 설정함으로서 처음 객체가 만들어 진 후 수정할 수 없게 막을 수 있음
	private String name;
	private int score;
	
	public Student(String n, int s) {
		this.name = n;
		this.score = s;
	}
	
	public void getIn() {
		System.out.println("-- getInfo()");
		System.out.println("name : " + name);
		System.out.println("score : " + score);
		
	}
	
}

setter, getter

  • 위의 경우에 속성을 private으로 선언했기 때문에 수정이 필요한 경우 수정할 수 없다.

    • 그러나 수정해야할 경우가 필요함
  • setter, getter

    • 멤버 변수를 외부에서 변경할 수 있도록 하는 메서드
    • 자동완성
      • 우클릭 -> source -> Generate Getters and Setters
      • 직접 만들어도 상관 무
  • getter

    • 속성의 데이터를 return
  • setter

    • 속성의 데이터를 set해줌
// 위의 코드에 getter, setter 추가
package testPjt3;

public class Student {

	private String name;
	private int score;
	
	public Student(String n, int s) {
		this.name = n;
		this.score = s;
	}
	
	public void getIn() {
		System.out.println("-- getInfo()");
		System.out.println("name : " + name);
		System.out.println("score : " + score);
		
	}
	// 이하 getter setter
	public String getName() {
		return name;
	}

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

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}
	
}
// main

package testPjt3;

public class MainClass {

	public static void main(String[] args) {
		
		Student student1 = new Student("홍길동", 90);
		student1.getIn();
		// 메서드로 사용해서 속성 데이터를 수정 가능
		student1.setScore(100);
	}
	
}

getter setter의 사용 이유

  • public으로 getter setter 메서드를 만드는 이유
    • 안전장치
    • 예를들면 변경하더라도 제약사항을 넣을 수 있음
// 이런식으로 특정 상황에만 동작하도록 만들 수 있음
	public void setScore(int score) {
		
        if (score > 50) {
            
			this.score = score;				
		}
	}
profile
자기 주도 개발전 (개발, 발전)

0개의 댓글

관련 채용 정보