자바 객체 지향 프로그래밍 (OOP) 완벽 가이드: 현실 세계를 모델링하는 강력한 도구
자바 객체 지향 프로그래밍 (OOP)은 현실 세계의 사물과 관계를 프로그램 코드로 표현하는 강력한 프로그래밍 패러다임입니다. 객체, 클래스, 상속, 다형성, 추상화 등의 개념을 사용하여 코드를 명확하고 유지 관리하기 쉽게 만들고, 재사용성을 높이며, 복잡한 시스템을 효율적으로 개발할 수 있도록 지원합니다.
1. 자바 객체 지향 프로그래밍 (OOP) 개요
1 - 1 객체 지향 프로그래밍 특징:
- 현실 세계 모델링: 현실 세계의 사물과 관계를 객체, 클래스 등으로 표현하여 코드를 직관적이고 이해하기 쉽게 만듬
- 코드 재사용성: 클래스를 통해 코드를 재사용하여 개발 효율성을 높이고 유지보수성을 향상시킴
- 유연성: 상속, 다형성을 통해 코드를 유연하게 확장하고 변경 가능
- 정보 은닉: 데이터를 객체 내부에 숨겨 외부에서 임의로 접근하거나 변경하는 것을 방지하여 데이터 보안 및 코드 안정성을 강화
- 모듈성: 코드를 모듈별로 구성하여 코드 관리 및 재사용성을 높임
1 - 2 객체:
- 현실 세계의 사물이나 개념을 나타내는 기본 단위
- 데이터 (필드)와 기능 (메서드)을 가지고 있으며, 서로 상호작용
- 객체는 서로 독립적으로 존재하며, 메모리 공간을 할당받음
1 - 3 클래스:
- 객체의 설계도 역할
- 객체의 필드와 메서드를 정의
- 객체 생성 방식을 제공
- 객체의 공통적인 특징을 나타냄
1 - 4 상속:
- 클래스가 다른 클래스의 속성과 기능을 물려받는 개념
- 코드 재사용성을 높이고 계층 구조를 만들 수 있음
- 부모 클래스와 자식 클래스의 관계 형성
1 - 5 다형성:
- 동일한 메서드 이름을 가진 객체가 상황에 따라 다르게 동작하는 개념
- 코드의 유연성을 높이고 간결하게 만듬
- 메서드 오버라이딩, 인터페이스 구현 등을 통해 구현
1 - 6 추상화:
- 객체의 중요한 특징만을 추출하여 표현하는 개념
- 불필요한 세부 정보를 생략하여 코드를 이해하기 쉽게 만듬
- 추상 클래스, 인터페이스 등을 통해 구현
2. 자바 객체 지향 프로그래밍 (OOP) 예시 코드
2 - 1. 사각형 클래스 구현
class Rectangle {
// 필드 (데이터)
private int width;
private int height;
// 생성자 (객체 초기화)
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
// 메서드 (기능)
public int getArea() {
return width * height;
}
public int getPerimeter() {
return 2 * (width + height);
}
// setter 메서드 (필드 값 설정)
public void setWidth(int width) {
this.width = width;
}
// getter 메서드 (필드 값 조회)
public int getWidth() {
return width;
}
// toString 메서드 (객체 정보 출력)
@Override
public String toString() {
return "Rectangle{" +
"width=" + width +
", height=" + height +
'}';
}
}
사용 예시:
Rectangle rectangle = new Rectangle(5, 3); // 폭 5, 높이 3인 사각형 생성
System.out.println("사각형 넓이: " + rectangle.getArea()); // 15 출력
System.out.println("사각형 둘레: " + rectangle.getPerimeter()); // 16 출력
rectangle.setWidth(10); // 폭을 10으로 변경
System.out.println("변경 후 사각형 정보: " + rectangle); // Rectangle{width=10, height=3} 출력
2. 은행 계좌 클래스 구현
class BankAccount {
private String name; // 계좌 소유자 이름
private int balance; // 잔액
public BankAccount(String name, int balance) {
this.name = name;
this.balance = balance;
}
public void deposit(int amount) {
if (amount <= 0) {
throw new IllegalArgumentException("입금 금액은 0보다 커야 합니다.");
}
balance += amount;
System.out.println(name + "님의 계좌에 " + amount + "원 입금되었습니다. 현재 잔액: " + balance + "원");
}
public void withdraw(int amount) {
if (amount <= 0) {
throw new IllegalArgumentException("출금 금액은 0보다 커야 합니다.");
}
if (amount > balance) {
System.out.println("잔액 부족으로 출금 불가능합니다. 현재 잔액: " + balance + "원");
return;
}
balance -= amount;
System.out.println(name + "님의 계좌에서 " + amount + "원 출금되었습니다. 현재 잔액: " + balance + "원");
}
public String toString() {
return "BankAccount{" +
"name='" + name + '\'' +
", balance=" + balance +
'}';
}
}
사용 예시:
BankAccount account = new BankAccount("홍길동", 10000); // 홍길동님의 초기 잔액 10000원
account.deposit(5000); // 5000원 입금
account.withdraw(3000); // 3000원 출금
account.withdraw(12000); // 잔액 부족으로 출금 불가능
System.out.println("현재 계좌 정보: " + account); // BankAccount{name='홍길동', balance=7000} 출력
'JAVA' 카테고리의 다른 글
JAVA Object 클래스 (0) | 2024.05.26 |
---|---|
JAVA 클래스 상속 (OOP) (0) | 2024.05.26 |
JAVA 함수 (Function) (0) | 2024.05.26 |
JAVA 배열(Array) (0) | 2024.05.26 |
JAVA Math 클래스 (0) | 2024.05.26 |