[계산] class TV1 { int inch; String color; TV1(int inch, String color) { this.inch = inch; this.color = color; } int getSize() { return inch; } String getColor() { return color; } void show() { System.out.println(inch + "인치 " + color + "색 입니다."); } void compareSize(TV1 compareSize) { if (inch > compareSize.inch) { System.out.println("내가 큽니다."); } else { System.out.println("내가 작습니다."); } } } public class Test21 { public static void main(String[] args) { TV1 tv = new TV1(10, "blue"); TV1 tv2 = new TV1(20, "blue"); System.out.println(tv.getSize() + "인치 입니다"); System.out.println(tv.getColor() + "색 입니다"); tv.show(); // 10 인치 bule 색 입니다. tv.compareSize(tv); // 내가 작습니다. tv2.compareSize(tv); // 내가 큽니다. } }
[결과값] 10인치 입니다 blue색 입니다 10인치 blue색 입니다. 내가 작습니다. 내가 큽니다.
[계산] class Song1 { String title; // 필드 String artist; String album; String country; int year; Song1(String title, String artist, int year, String country) { this.title = title; // 생성자 초기화 this.artist = artist; this.album = album; this.country = country; this.year = year; } void show() { System.out.println(title + artist + year + country); } } public class Test21 { public static void main(String[] args) { Song1 song = new Song1("Dancing Queen", "ABBA", 1978, "스웨덴"); song.show(); } }
[결과값] Dancing QueenABBA1978스웨덴
다이렉트로 값 변경하지 못하게 하는 것.
데이터 멤버를 함부로 바꾸지 못하게 함수로만 정보를 접근할 수 있도록 하는 것
문법(private 등)을 만들어서 컴파일 에러를 나오게 한다.
★소스코드 데이터 멤버(인스턴스 변수)는 private로 막음
★데이터 멤버 변경은 함수로
[계산] //private : 접근 제한 / 다른 클래서에서의 접근을 제한 시킨다. 같은 클래스 내에서만 접근 가능 class Circle5 { private double rad = 0; // 원의 반지름 final double PI = 3.14; public Circle5(double r) { setRad(r); } ////////////////////////////////////// 정보은닉 public void setRad(double r) { // Setter if (r < 0) { rad = 0; return; } rad = r; } ////////////////////////////////////// public double getArea() { return (rad * rad) * PI; } } public class Test22 { public static void main(String[] args) { Circle5 c = new Circle5(1.5); System.out.println(c.getArea()); c.setRad(2.5); System.out.println(c.getArea()); c.setRad(-3.3); System.out.println(c.getArea()); // c.rad = -4.5;// 컴파일 오류 발생 안함 // 다이렉트로 rad에 값을 집어 넣기 때문에 계산이 된다. // private를 사용하면 접근하지 못하게 만들어 컴파일 오류가 발생한다. System.out.println(c.getArea()); } }
[결과값] 7.065 19.625 0.0 0.0
[계산] package example1; // class 생성 시 package에 있는 값을 지우지 않으면 자동으로 생성됨. class Rectangle4 { private int width; private int heigth; public Rectangle4(int width, int heigth) { setWidth(width); setHeight(heigth); } public int getWidth() { return width; } public void setWidth(int width) { if (width < 0) { this.width = 0; System.out.println("잘못된 입력입니다."); return; } this.width = width; } public int getHeight() { return heigth; } public void setHeight(int heigth) { if (heigth < 0) { this.heigth = 0; System.out.println("잘못된 입력입니다."); return; } this.heigth = heigth; } } public class A { public static void main(String[] args) { Rectangle4 rec = new Rectangle4(10, -20);// 잘못된 입력입니다. } }
[결과값] 잘못된 입력입니다.
private : class 내에서만 사용할 수 있다.
default : 같은 패키지 내에서는 접근 가능하지만, 다른 패키지에 있으면 접근 불가.
public : 언제 어디서든 접근할 수 있다.