객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발 방법론 중 하나로, 프로그램을 객체들의 집합으로 모델링하고 객체 간 상호작용을 통해 프로그램을 구성하는 방식입니다. 객체 지향 프로그래밍의 주요 특징은 다음과 같습니다:
캡슐화 (Encapsulation):
상속 (Inheritance):
다형성 (Polymorphism):
추상화 (Abstraction):
객체 지향 설계 (Object-Oriented Design):
객체 지향 프로그래밍은
현실 세계의 개념과 모델링을 반영하여 소프트웨어를 구축하는 강력한 패러다임으로 널리 사용되고 있습니다. 이를 통해 코드의 가독성, 재사용성, 유지보수성 등을 개선할 수 있습니다.
정보 은닉은 객체 지향 프로그래밍의 특징 중 하나입니다. 정보 은닉은 객체의 내부 상태와 구현 세부 사항을 외부로부터 감추는 것을 의미합니다. 이를 통해 객체의 데이터를 보호하고 오용을 방지할 수 있습니다.
정보 은닉은 캡슐화를 통해 구현되며, 객체의 내부 데이터에 직접 접근하는 것을 제한하고, 외부에서는 제공된 인터페이스를 통해 객체와 상호작용합니다. 이로써 객체의 내부 구현이 변경되어도 외부 코드에 영향을 최소화할 수 있습니다. 또한, 정보 은닉은 코드의 모듈성과 유지보수성을 향상시키며, 객체 간의 결합도를 낮추어 시스템의 유연성을 높입니다.
정보 은닉은 객체 지향 프로그래밍의 중요한 특징 중 하나이며, 객체의 내부 상태를 보호하고 객체 간의 결합도를 관리하는 데 도움을 줍니다.
public class Person {
private String name; // private으로 선언된 멤버 변수
public Person(String name) {
this.name = name;
}
public String getName() {
return name; // 외부에서는 getName() 메소드를 통해 name 변수에 접근
}
public void setName(String name) {
this.name = name; // 외부에서는 setName() 메소드를 통해 name 변수를 변경
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John");
System.out.println(person.getName()); // "John" 출력
person.setName("Jane"); // 외부에서는 setName() 메소드를 통해 name 변수 변경
System.out.println(person.getName()); // "Jane" 출력
// 다음과 같이 직접 접근하려고 하면 컴파일 오류가 발생합니다.
// person.name = "Bob"; // 오류: The field Person.name is not visible
}
}
위의 예시에서 Person 클래스의 name 멤버 변수는 private으로 선언되어 외부에서 직접 접근할 수 없습니다. 대신, getName() 메소드와 setName() 메소드를 통해 name 변수에 접근하고 변경할 수 있습니다. 이를 통해 Person 객체의 내부 상태를 보호하고 외부에서의 오용을 방지할 수 있습니다.
Main 클래스에서 Person 객체를 생성하고 getName() 메소드를 통해 name 변수의 값을 출력합니다. 또한, setName() 메소드를 사용하여 name 변수의 값을 변경한 후 다시 출력합니다.
person.name = "Bob";과 같이 직접 name 변수에 접근하려고 하면 컴파일 오류가 발생합니다. 이는 정보 은닉의 결과입니다. 외부에서는 제공된 메소드를 통해 객체와 상호작용하므로 객체의 내부 구현이 변경되어도 외부 코드에 영향을 덜 주는 이점을 가집니다.
접근 제어자(Access Modifiers)는 객체 지향 프로그래밍에서 클래스의 멤버(변수, 메소드, 생성자 등)에 대한 접근 범위를 제어하는 데 사용되는 키워드입니다.
public
:
public
으로 선언된 멤버는 어디서든 접근할 수 있습니다.protected
:
protected
로 선언된 멤버는 동일한 패키지 내의 다른 클래스와 상속 관계에 있는 클래스에서 접근할 수 있습니다.default
(기본적으로 지정되는 접근 제어자):
default
로 선언된 멤버는 같은 패키지 내의 다른 클래스에서만 접근할 수 있습니다.default
로 간주됩니다.private
:
private
으로 선언된 멤버는 해당 클래스 내부에서만 접근할 수 있습니다.public, default
이다.이러한 접근 제어자를 사용하여 클래스의 멤버들에 대한 접근을 제한함으로써 정보 은닉을 실현하고, 코드의 모듈성과 보안을 강화할 수 있습니다. 올바른 접근 제어자의 사용은 객체 지향 프로그래밍의 원칙을 준수하고 클래스의 캡슐화를 유지하는 데 도움을 줍니다.