1.정보은닉에 대하여 설명하시오.
- Java 에서의 정보은닉은 4개의 접근제한자를 통해 이루어진다.
- public: 다른 package 의 코드를 접근할 수 있다.
- protected: 상속받은 class 까지도 접근할 수 있다.
- default: 동일 package 만 접근할 수 있다.
- private: 같은 class 에서만 접근가능하다.
2.정보은닉의 개념을 도입하여, 아래의 코드를 완성하시오.
public class Rectangle {
//
int width;
int height;
//
int getArea() {
return width * height;
}
}
// 코드
//
public class Rectangle {
private int width;
private int height;
//
public Rectangle(int width, int height) {
setWidth(width);
setHeight(height);
}
//
private static boolean isPositive(int integer) {
boolean positive;
if (integer >= 0) {
positive = true;
} else {
System.out.println("값이 음수입니다.");
positive = false;
};
return positive;
}
//
public int getWidth() {
return this.width;
}
public int getHeight() {
return this.height;
}
public void setWidth(int width) {
if (this.isPositive(width)) {
this.width = width;
} else {
this.width = 0;
};
}
public void setHeight(int height) {
if (this.isPositive(height)) {
this.height = height;
} else {
this.height = 0;
};
}
//
public int getArea() {
return (this.width * this.height);
}
}
3.접근제한자 4가지 종류에 대하여 설명하시오.
- public: 다른 package 의 코드를 접근할 수 있다.
- protected: 상속받은 class 까지도 접근할 수 있다.
- default: 동일 package 만 접근할 수 있다.
- private: 같은 class 에서만 접근가능하다.
4.class 에서 붙일수 있는 접근 제한자 2개를 설명하시오?
- class 에서 붙일 수 있는 접근 제한자는 public 과 default 가 있다.
5.지역변수에 접근 제한자가 필요없는 이유는?
- 그 함수 안에서만 쓸 수 있기 때문에 그 scope 를 나가면 어차피 사용할 수 없다.
6.정보 은닉 개념을 도입 하여 코딩 하시오..
class Child{
int age;
String name;
//
void showInfo() {
System.out.println("나이:" + age);
System.out.println("이름:" + name);
//
}
}
// 코드
//
public class Child {
private int age;
private String name;
//
public Child(int age, String name) {
setAge(age);
setName(name);
}
//
public int getAge() {
return this.age;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
if (age < 0) {
System.out.println("아직 태어나지도 않았습니다.");
this.age = 0;
} else {
if (age > 19) {
System.out.println("성인입니다.");
};
this.age = age;
};
}
public void setName(String name) {
if (name == null) {
System.out.println("이름이 없습니다.");
this.name = "이름없음";
} else if (name.length() > 10) {
System.out.println("이름이 깁니다.");
this.name = "긴 이름";
} else {
this.name = name;
};
}
//
public void showInfo() {
System.out.println("나이:" + this.age);
System.out.println("이름:" + this.name);
}
}