객체 지향 프로그래밍의 핵심 개념 정리
이 글에서는 자바의 객체 지향 프로그래밍(OOP)에서 중요한 개념인 객체, 클래스, 상속, 다형성, 캡슐화 등을 소개합니다. 자바에서 이 개념들을 어떻게 구현하고 활용하는지 다양한 예제와 함께 설명합니다.
1. 객체와 클래스
- 객체(Object): 실세계의 사물이나 개념을 컴퓨터 프로그램에서 표현한 것. 객체는 상태(state)와 행동(behavior)을 가집니다.
- 클래스(Class): 객체를 만들기 위한 설계도. 클래스는 객체의 속성(필드)과 동작(메소드)을 정의합니다.
class Circle { int radius; // 필드 String name; // 필드 double getArea() { // 메소드 return 3.14 * radius * radius; } }
- 예제:
2. 캡슐화 (Encapsulation)
캡슐화는 객체의 내부 구현을 외부에서 볼 수 없도록 숨기는 개념입니다. 객체 내부의 데이터는 외부에서 직접 접근할 수 없으며, 공개된 메소드를 통해서만 접근이 가능합니다.
예제:
class Circle {
private int radius; // private 필드
private String name; // private 필드
public double getArea() { // public 메소드
return 3.14 * radius * radius;
}
}
3. 상속 (Inheritance)
상속은 기존 클래스(부모 클래스)의 속성과 동작을 새로운 클래스(자식 클래스)에 물려주는 개념입니다. 자식 클래스는 부모 클래스의 모든 특성을 상속받아 확장하거나 변경할 수 있습니다.
예제:
class Animal {
void sound() {
System.out.println("소리를 냅니다.");
}
}
class Dog extends Animal {
void sound() { // 메소드 오버라이딩
System.out.println("멍멍");
}
}
4. 다형성 (Polymorphism)
다형성은 같은 이름의 메소드가 서로 다른 클래스에서 다르게 동작하도록 하는 개념입니다. 대표적인 예로 메소드 오버로딩과 오버라이딩이 있습니다.
- 메소드 오버로딩: 같은 이름의 메소드를 매개변수의 타입이나 개수에 따라 다르게 정의하는 것.
class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } }
- 예제:
- 메소드 오버라이딩: 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것.
class Animal { void sound() { System.out.println("소리를 냅니다."); } } class Cat extends Animal { void sound() { // 오버라이딩 System.out.println("야옹"); } }
- 예제:
5. 생성자 (Constructor)
생성자는 객체가 생성될 때 초기화를 담당하는 특별한 메소드입니다. 생성자는 클래스 이름과 동일해야 하며, 반환 타입이 없습니다.
예제:
class Circle {
int radius;
String name;
// 매개변수가 없는 생성자
public Circle() {
radius = 1;
name = "Unnamed Circle";
}
// 매개변수가 있는 생성자
public Circle(int r, String n) {
radius = r;
name = n;
}
}
6. this 키워드
this 키워드는 객체 자신을 참조하는 레퍼런스입니다. 주로 객체의 필드와 메소드 매개변수의 이름이 동일할 때, 객체 자신의 필드를 가리킬 때 사용됩니다.
예제:
class Circle {
int radius;
public Circle(int radius) {
this.radius = radius; // this.radius는 객체의 필드를 가리킴
}
}
7. static 키워드
static 키워드는 클래스의 모든 객체가 공유하는 클래스 멤버(필드와 메소드)를 정의할 때 사용됩니다. static으로 정의된 필드와 메소드는 객체를 생성하지 않고도 클래스 이름으로 직접 접근할 수 있습니다.
예제:
class MathUtil {
public static int abs(int a) {
return (a < 0) ? -a : a;
}
}
// static 메소드 호출
int result = MathUtil.abs(-10);
8. 가비지 컬렉션 (Garbage Collection)
자바는 사용되지 않는 객체(가비지)를 자동으로 메모리에서 회수하는 가비지 컬렉션을 지원합니다. 개발자는 객체를 명시적으로 삭제할 필요가 없으며, System.gc() 메소드를 통해 가비지 컬렉션을 요청할 수 있습니다.
'Java' 카테고리의 다른 글
명품자바 프로그래밍의 기초: 6장 (0) | 2024.08.18 |
---|---|
명품자바 프로그래밍의 기초: 5장 (0) | 2024.08.14 |
명품자바 프로그래밍의 기초: 3장 (0) | 2024.08.13 |
명품자바 프로그래밍의 기초: 2장 (0) | 2024.08.12 |
명품자바 프로그래밍의 기초: 1장 (0) | 2024.08.11 |