클래스와 객체의 개념
클래스(Class)란?
객체를 생성하기 위한 설계도(템플릿)
즉, 속성(필드)와 동작(메서드)을 정의하는 툴
클래스 정의
class Car {
String brand; // 속성 (필드)
int speed;
void accelerate() { // 동작 (메서드)
speed += 10;
System.out.println(brand + "가 속도를 올립니다. 현재 속도: " + speed);
}
}
객체(Object)란?
클래스를 기반으로 생성된 실체(인스턴스)
즉, 클래스에서 정의한 속성과 동작을 실제로 가지고 있는 개별 데이터
객체 생성
public class Main {
public static void main(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: 어디서든 접근 가능, 가장 개방적
캡슐화 적용
class BankAccount {
private int balance = 0; // private으로 직접 접근 불가
public void deposit(int amount) { // 외부에서는 public 메서드로 접근
if (amount > 0) {
balance += amount;
System.out.println("입금 완료! 현재 잔액: " + balance);
}
}
public int getBalance() { // 잔액 조회 메서드
return balance;
}
}
캡슐화된 객체 사용
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.deposit(1000);
System.out.println("현재 잔액: " + account.getBalance());
}
}
➡︎ balance 필드는 private 이므로 외부에서 직접 접근 불가
➡︎ deposit() 메서드를 통해서만 잔액 변경 가능! ⭐️ 데이터 무결성 유지 ⭐️
주요 포인트
- 클래스와 객체의 차이를 명확히 알아야 함!
- 클래스: 객체를 만들기 위한 설계도
- 객체: 클래스를 기반으로 생성된 실체
- 객체를 사용하는 이유를 코드 재사용성, 유지보수성, 캡슐화 관점에서 논리적으로 설명할 줄 알아야 함!
- 코드 재사용성 증가
- 유지보수성 향상
- 캡슐화를 통한 정보 보호
- 캡슐화는 접근 제어자와 실제 활용 예시를 알고 있어야 함!
- 객체 내부 데이터를 외부에서 직접 접근하지 못하게 보호
- private, public 등의 접근 제어자를 사용
'백엔드 기본 개념 정리 > 객체지향 프로그래밍 (OOP)' 카테고리의 다른 글
객체지향의 한계와 대안, 구성(Composition) (0) | 2025.03.10 |
---|---|
의존성(Dependency) 과 싱글톤(Singleton) (0) | 2025.03.10 |
객체지향 설계 원리(SOLID) & 추상화(Abstraction) (1) | 2025.03.07 |
상속(Inheritance)과 다형성(Polymorphism) (0) | 2025.03.06 |