객체지향 프로그래밍(OOP)은 프로그램의 요소들을 객체(Object) 단위로 모델링하여 유지보수성과 재사용성을 높이는 소프트웨어 설계 기술입니다.
1. 객체지향 기초 용어 사전 (Glossary)
- Class (클래스): 객체를 생성하기 위한 틀(Template)이자 설계도입니다.
- Instance (인스턴스): 클래스 설계도를 바탕으로 메모리 Heap 공간에
new연산자로 생성된 객체 실체입니다. - Constructor (생성자): 객체 인스턴스가 동적으로 생성될 때 자동 호출되어 필드 변수들을 초기화하는 특별한 메소드입니다.
- static Member: 객체마다 따로 생기지 않고, 클래스 로딩 시점에 메소드 메모리 영역에 단 하나만 생성되어 모든 인스턴스가 공유하는 멤버입니다.
- final: 변수에 붙으면 값 변경 불가(상수), 메소드에 붙으면 오버라이딩 불가, 클래스에 붙으면 상속 불가로 만드는 제약 키워드입니다.
2. 캡슐화 및 static/final 필드가 적용된 클래스 설계 예제
public class BankAccount {
// 1. static 상수 (은행 이름 공통 공유)
public static final String BANK_NAME = "DAVHAVE BANK";
// 2. private 필드 캡슐화 (정보 은닉)
private String accountNumber;
private String owner;
private int balance;
// 3. 생성자 오버로딩 (Constructor Overloading)
public BankAccount(String accountNumber, String owner) {
this(accountNumber, owner, 0); // 다른 생성자 호출
}
public BankAccount(String accountNumber, String owner, int balance) {
this.accountNumber = accountNumber;
this.owner = owner;
this.balance = balance;
}
// 4. 입금/출금 메소드
public void deposit(int amount) {
this.balance += amount;
System.out.println(owner + "님 계좌에 " + amount + "원 입금 완료.");
}
public int getBalance() {
return balance;
}
}
3. 자주 묻는 질문 (Q&A)
Q. static 메소드 안에서 일반 인스턴스 변수(this.name)를 직접 부를 수 없나요?
A. 부를 수 없습니다! static 메소드는 객체가 new 생성되기 전 클래스 로딩 시점에 먼저 메모리에 올라가기 때문에, 아직 객체가 생기지 않았을 수도 있는 인스턴스 멤버에 직접 접근하는 것이 불가능합니다.