<객체지향 프로그래밍>
**객체지향 프로그래밍(OOP, Object-Oriented Programming)**은 세상을 객체들의 상호작용으로 모델링하여 프로그램을 구성하는 설계 방식이다.
- 핵심 개념 정리
객체(Object): 현실에서 목적과 가치가 있어 논리적으로 식별 가능한 것
- 예시: 사람, 자동차, 주문, 배송 등
클래스(Class): 객체를 만들기 위한 설계도
- 필드(Field): 데이터를 저장하는 변수
- 메서드(Method): 객체의 기능을 정의하는 함수
인스턴스(Instance): 클래스로부터 new 키워드를 통해 생성한 실제 메모리를 가지고 있는 객체
- 추상화 과정
추상화는 문제 해결에 필요한 속성과 기능만 걸러내서 단순화하는 과정이다.
- 구현하고자 하는 프로그램에서 필요한 객체 식별
- 객체들의 공통적인 속성, 기능 수집
- 프로그램 목적에 맞게 속성과 기능 선별
- 최종 속성들을 적절한 자료형과 변수명으로 정의
<기본 클래스 구조와 객체 생성>
- 학생 클래스 예제
package com.kh.object.ex1;
public class Student {
// 필드 영역: 사용할 데이터를 선언하는 영역
String name;
int age;
double height;
// 메서드 영역: 클래스의 기능을 정의하는 영역
void myInfo() {
System.out.printf("안녕하세요. 저는 %d살의 %s입니다.\n", age, name);
}
}
- 객체 생성 및 활용
package com.kh.object.ex1;
public class Run {
public static void main(String[] args) {
// 클래스명 객체이름 -> 해당 클래스 타입의 참조변수 생성
Student park;
// 객체이름 = new 클래스명() -> 새로운 인스턴스 생성
park = new Student();
Student song = new Student();
// 필드에 값 할당
park.name = "박지연";
park.age = 20;
song.name = "송아영";
song.age = 21;
// 메서드 호출
park.myInfo();
song.myInfo();
// 객체의 참조값 출력
System.out.println(park);
System.out.println(song);
}
}
실행 결과:
안녕하세요. 저는 20살의 박지연입니다.
안녕하세요. 저는 21살의 송아영입니다.
com.kh.object.ex1.Student@15db9742
com.kh.object.ex1.Student@6d06d69c
<생성자와 this 키워드>
- 생성자의 개념
**생성자(Constructor)**는 필드를 초기화하기 위한 특수 목적의 메서드이다.
- 클래스와 이름이 동일하며 반환타입이 없다
- 기본 생성자는 개발자가 정의하지 않으면 컴파일러가 자동 생성한다
- 생성자를 하나라도 정의하면 기본 생성자는 자동 생성되지 않는다
- 은행계좌 클래스 예제
package com.kh.object.ex2;
public class BankAccount {
int balance;
// 매개변수가 있는 생성자
public BankAccount(int balance) {
this.balance = balance; // this: 현재 인스턴스를 가리키는 키워드
}
// 입금 메서드
void deposit(int amount) {
balance += amount;
}
// 출금 메서드
void withdraw(int amount) {
balance -= amount;
}
// 잔액조회 메서드
void checkMyBalance() {
System.out.println("잔액 : " + balance);
}
// 계좌이체 메서드
void transfer(BankAccount target, int amount) {
balance -= amount;
target.balance += amount;
}
}
- 객체간 상호작용 예제
package com.kh.object.ex2;
public class Run {
public static void main(String[] args) {
BankAccount ac1 = new BankAccount(0);
BankAccount ac2 = ac1; // 같은 객체를 참조
ac1.deposit(5000);
ac2.withdraw(1000);
ac1.checkMyBalance(); // 결과: 4000원
ac2 = new BankAccount(0); // 새로운 객체 생성
ac2.deposit(5000);
ac1.transfer(ac2, 1000); // 계좌이체
ac1.checkMyBalance(); // ac1 잔액: 3000원
ac2.checkMyBalance(); // ac2 잔액: 6000원
}
}
실행 결과:
잔액 : 4000
잔액 : 3000
잔액 : 6000
<메서드 오버로딩>
- 오버로딩 개념
**메서드 오버로딩(Method Overloading)**은 메서드 이름이 동일해도 매개변수의 타입, 개수, 순서에 따라 다른 메서드로 인식하는 기능이다.
- Math 클래스 오버로딩 예제
package com.kh.object.ex3;
public class Math {
// 하나의 정수를 받아서 두 배로 만드는 메서드
int adder(int n) {
return n + n;
}
// 두 정수를 더하는 메서드
int adder(int n1, int n2) {
return n1 + n2;
}
// 두 실수를 더하는 메서드
double adder(double n1, double n2) {
return n1 + n2;
}
// 정수와 문자열을 합치는 메서드 (정수가 앞)
String adder(int n1, String str) {
String addResult = n1 + str;
return addResult;
}
// 문자열과 정수를 합치는 메서드 (문자열이 앞)
String adder(String str, int n1) {
String addResult = n1 + str;
return addResult;
}
}
- 오버로딩 메서드 호출 예제
package com.kh.object.ex3;
public class Run {
public static void main(String[] args) {
Math m = new Math();
System.out.println(m.adder(10, 20)); // int + int
System.out.println(m.adder(20)); // int 하나
System.out.println(m.adder(10.312, 20.235)); // double + double
System.out.println(m.adder('a', 'b')); // char는 int로 형변환
System.out.println(m.adder(10, "살이다")); // int + String
}
}
실행 결과:
30
40
30.547
195
10살이다
정리 및 요약
- 객체지향 프로그래밍은 현실 세계의 객체들을 프로그램으로 모델링하는 방식이다
- 클래스는 객체의 설계도이며, 인스턴스는 클래스로부터 생성된 실제 객체이다
- 생성자는 객체 생성 시 필드를 초기화하는 특수 메서드이다
- this 키워드는 현재 인스턴스를 참조할 때 사용한다
- 메서드 오버로딩을 통해 같은 이름의 메서드를 여러 개 정의할 수 있다
'Java' 카테고리의 다른 글
| Java_12) Inheritance - 상속 (4) | 2025.08.27 |
|---|---|
| Java_11) Access Modifier, ObjectArray (1) | 2025.08.27 |
| Java_09) Method (4) | 2025.08.27 |
| Java_08) 다차원 배열 (6) | 2025.08.26 |
| Java_07) array - 배열 (1) | 2025.08.26 |