OOP(Object-Oriented Programming)의 4대 원칙
- 캡슐화 (Encapsulation): 객체의 데이터와 그 데이터를 처리하는 메서드를 하나로 묶어 외부에서 직접 접근할 수 없도록 하는 것입니다. 이를 통해 데이터의 무분별한 변경을 방지하고 객체의 안정성을 높입니다.
- 상속 (Inheritance): 기존의 클래스를 기반으로 새로운 클래스를 생성하는 기능으로, 코드의 재사용성을 높이고 중복된 코드 작성을 줄입니다. 예를 들어, '동물' 클래스에서 '포유류' 또는 '조류' 클래스를 파생시킬 수 있습니다.
- 다형성 (Polymorphism): 같은 이름의 메서드가 서로 다른 형태로 동작할 수 있는 능력입니다. 이는 메서드 오버로딩과 오버라이딩을 통해 구현되며, 유연한 코드 작성을 가능하게 합니다.
- 추상화 (Abstraction): 복잡한 시스템을 단순화하여 필요한 특성만을 강조하는 것입니다. 예를 들어, 자동차 객체를 표현할 때 엔진, 바퀴 등의 주요 특성만을 강조하고 나머지 세부 사항은 생략할 수 있습니다.
클래스의 멤버에 대한 접근 범위를 지정하는 키워드
public
어디서든 접근 가능
클래스 외부에서도 자유롭게 사용
import entity.Clothing;
import entity.Electronics;
public class ProductTest {
public static void main(String[] args) {
// 매개변수가 있는 생성자를 사용하여 Electronics 객체 생성
// productId: "E001", name: "Smart TV", price: 1200000,
// brand: "삼성전자", warrantyPeriod: 24
Electronics specificElectronicProduct=new Electronics("E001", "Smart TV", 1200000, "삼성전자", 24);
protected
해당 클래스 내부와 상속받은 자식 클래스에서 접근 가능
외부 클래스에서는 접근 불가
package entity;
public abstract class Product {
protected String productId;
protected String name;
protected double price;
private
해당 클래스 내부에서만 접근 가능
외부 클래스나 상속받은 클래스에서 접근불가
가장 강력한 정보 은닉을 제공
package entity;
public class Clothing extends Product{
private String size;
private String material;
private 멤버에 접근하려면?
getter와 setter 메서드를 사용하여 private 멤버에 간접적으로 접근할 수 있다.
예: getStudentName(), setStudentName(String name)
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
왜 구분해서 사용할까?
정보 은닉(캡슐화)을 위해서.
이를 통해 의도치 않은 코드 수정을 방지하고 객체 간 간섭을 최소화할 수 있다!