정보은닉은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 객체의 내부 구현 세부사항을 외부로부터 감추는 것을 의미합니다. 클래스 내부의 상태(멤버 변수)와 행위(메서드)를 외부에서 직접 접근하지 못하도록 하여, 객체의 무결성을 보호하고 캡슐화를 강화합니다. 정보은닉을 통해 외부에서는 객체에 필요한 기능을 사용하면서도 내부 구현에 대한 직접적인 접근을 막아 코드의 유지보수성을 높이고 부작용을 최소화할 수 있습니다.
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);
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
if (width > 0) {
this.width = width;
} else {
System.out.println("너비는 0보다 커야 합니다.");
}
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
if (height > 0) {
this.height = height;
} else {
System.out.println("높이는 0보다 커야 합니다.");
}
}
public int getArea() {
return width * height;
}
}
지역변수는 메서드나 블록 내에서 선언된 변수로, 해당 블록 내에서만 유효합니다. 따라서 다른 메서드나 클래스에서 직접적으로 접근할 수 없으므로 별도의 접근 제한자가 필요하지 않습니다.
//
class Child{
int age;
String name;
void showInfo() {
System.out.println("나이:" + age);
System.out.println("이름:" + name);
}
}
class Child {
private int age;
private String name;
public void setAge(int age) {
if (age >= 0) {
this.age = age;
} else {
System.out.println("나이는 음수일 수 없습니다.");
}
}
public void setName(String name) {
if (name != null) {
this.name = name;
} else {
System.out.println("잘못된 이름입니다.");
}
}
public void showInfo() {
System.out.println("나이: " + age);
System.out.println("이름: " + name);
}
}