classMySQLDatabase{
voidconnect(){ System.out.println("MySQL 연결"); }
}
classDataManager{
MySQLDatabase database = new MySQLDatabase(); // 특정 DB에 강하게 결합 (DIP 위반)
}
classCar{
String brand; // 속성 (필드)int speed;
voidaccelerate(){ // 동작 (메서드)
speed += 10;
System.out.println(brand + "가 속도를 올립니다. 현재 속도: " + speed);
}
}
객체(Object)란?
클래스를 기반으로 생성된 실체(인스턴스)
즉, 클래스에서 정의한 속성과 동작을 실제로 가지고 있는 개별 데이터
객체 생성
publicclassMain{
publicstaticvoidmain(String[] args){
Car myCar = new Car(); // 객체 생성
myCar.brand = "Tesla"; // 속성 값 설정
myCar.speed = 0;
myCar.accelerate(); // 동작 수행
}
}
➡︎ myCar 는 Car 클래스로부터 만들어진 객체!
➡︎ 개별 객체에 속성을 설정할 수 있음 (myCar.brand = "Tesla")
객체를 사용하는 이유
코드의 재사용성 증가
클래스를 한 번 정의하면 여러 객체를 생성할 수 있음
같은 구조를 가진 객체를 만들 때 중복 코드를 줄일 수 있음
유지보수성 향상
코드가 모듈화되므로, 특정 기능을 수정할 때 다른 부분에 영향을 줄 가능성이 낮아짐
관련 기능을 묶어 가독성이 향상됨
캡슐화 및 정보 은닉 가능
객체 내부의 데이터를 보호하고, 불필요한 접근을 제한할 수 있음
외부에서는 제한된 방식으로만 데이터를 변경할 수 있도록 제어 가능
캡슐화
캡슐화(Encapsulation)란?
객체의 내부 데이터를 외부에서 직접 접근하지 못하도록 보호하는 개념
➡︎ 데이터 보호 + 객체 내부 구현 숨기기 가능
접근 제어자(Access Modifier)
Java 에서는 접근 제어자를 사용해 데이터 접근 범위를 제한할 수 있음
private: 클래스 내부에서만 접근 가능, 가장 제한적
protected: 같은 패키지 또는 상속 관계에서 접근 가능
public: 어디서든 접근 가능, 가장 개방적
캡슐화 적용
classBankAccount{
privateint balance = 0; // private으로 직접 접근 불가publicvoiddeposit(int amount){ // 외부에서는 public 메서드로 접근if (amount > 0) {
balance += amount;
System.out.println("입금 완료! 현재 잔액: " + balance);
}
}
publicintgetBalance(){ // 잔액 조회 메서드return balance;
}
}