Java 프로그래밍에서 상속, 추상화, 인터페이스는 객체 지향 프로그래밍의 핵심 요소입니다. 이러한 개념을 이해하고 잘 활용하면 코드의 재사용성과 확장성을 높여 효율적인 프로그램을 작성할 수 있습니다. 이 글에서는 Java의 상속, 추상화, 인터페이스 개념 및 사용법에 대해 설명하고 예시를 들어 알아보겠습니다.
1. 상속
상속이란 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 사용하는 것입니다. 상속을 통해서 코드의 중복을 최소화하고, 유지 보수를 효율적으로 할 수 있습니다.
1.1. 상속 사용법
Java에서는 extends 키워드를 사용하여 상속을 구현할 수 있습니다.
class Animal {
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
// 상속받은 makeSound 메서드 사용 가능
}
public class App {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // "동물이 소리를 냅니다." 출력
}
}
위 예시에서 Dog 클래스는 Animal 클래스를 상속받습니다. 따라서 Dog 클래스는 상속받은 makeSound() 메서드를 사용할 수 있습니다.
1.2. 메서드 오버라이딩
서브클래스에서 슈퍼클래스의 특정 메서드를 재정의하여 다른 동작을 구현할 수 있습니다. 이를 메서드 오버라이딩이라고 합니다.
class Animal {
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override //오버라이딩
void makeSound() {
System.out.println("멍멍!!");
}
}
public class App {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // "멍멍!!" 출력
}
}
2. 추상화
추상화는 중요한 부분만 남기고 불필요한 정보를 생략하거나 숨기는 과정입니다. 클래스 추상화는 abstract 키워드를 사용하여 추상 클래스를 생성합니다.
2.1. 추상 클래스 사용법
추상 클래스는 여러 메서드 중 하나 이상이 정의되지 않고 선언만 되어있습니다. 추상 메서드에는 abstract 키워드를 사용하며, 구현이 없는 상태로 선언됩니다.
abstract class Animal {
abstract void makeSound();
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("멍멍!!");
}
}
2.2. 추상 클래스의 제약
추상 클래스는 인스턴스를 생성할 수 없습니다. 그러나 추상 클래스의 참조 변수를 선언하고 서브 클래스의 객체를 참조할 수 있습니다.
Animal dog = new Dog(); // 추상 클래스 참조 변수로 서브 클래스 객체 참조 가능
dog.makeSound(); // "멍멍!!" 출력
3. 인터페이스
인터페이스는 메서드의 원형과 상수만 정의하고 구현을 갖지 않는 독립된 요소입니다. 클래스가 인터페이스를 구현하면 인터페이스에 정의된 메서드를 모두 구현해야 합니다.
3.1. 인터페이스 사용법
Java에서 인터페이스는 interface 키워드를 사용하여 생성할 수 있습니다. 클래스가 인터페이스를 구현하려면 implements 키워드를 사용합니다.
interface Speakable {
void speak();
}
class Dog implements Speakable {
@Override
public void speak() {
System.out.println("멍멍!!");
}
}
3.2. 인터페이스의 특징
- 인터페이스는 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
- 인터페이스는 다중 상속의 문제를 해결하고 확장성을 높입니다.
interface Speakable {
void speak();
}
interface Runnable {
void run();
}
class Dog implements Speakable, Runnable {
@Override
public void speak() {
System.out.println("멍멍!!");
}
@Override
public void run() {
System.out.println("강아지가 달립니다.");
}
}
Java의 상속, 추상화, 인터페이스를 활용하면 코드의 중복을 최소화하고 객체 간의 관계를 효율적으로 구현할 수 있습니다. 이 글에서 소개한 개념과 예시를 참고하여 Java 프로그래밍 능력을 더욱 향상하길 바랍니다.
'IT 개발 > JAVA' 카테고리의 다른 글
Java 멀티스레딩 개념 및 활용: 스레드 생성, 동기화 (0) | 2023.07.21 |
---|---|
Java Collection Framework 간단히 이해하기: List, Set, Map 인터페이스 및 구현 클래스 활용법 (0) | 2023.07.21 |
[Java기초] Java 클래스와 객체 지향 프로그래밍 (0) | 2023.07.21 |
[Java기초] Java 배열 및 다차원 배열 사용법 (0) | 2023.07.20 |
[Java기초] Java 연산자와 표현식 이해하기 (0) | 2023.07.20 |