인스턴스 메서드 (Instance Method)
1. 정의
객체의 인스턴스를 통해 호출되는 메서드
2. 특징
객체를 생성한 후 호출할 수 있음
인스턴스 변수와 상호작용할 수 있으며, 인스턴스의 상태를 조작하거나 참조
this 키워드를 사용하여 현재 객체를 참조 가능
class MyClass {
private String food;
public MyClass(String food) {
this.food = food;
}
public void printFood() {
System.out.println("좋아하는 음식: " + this.food);
}
}
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass("🍪");
obj.printFood(); //좋아하는 음식: 🍪
}
}
정적 메서드 (Static Method)
1. 정의
클래스, 인터페이스에 속하며, 객체나 구현 클래스 생성 없이 호출할 수 있는 메서드
2. 특징
클래스 이름 또는 인터페이스 이름으로 호출
객체의 인스턴스 변수나 this를 사용할 수 없음
주로 유틸리티 메서드로 활용
class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(MathUtils.add(3, 5)); //출력: 8
}
}
interface MathUtils {
static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(MathUtils.add(3, 5)); //출력: 8
}
}
추상 메서드 (Abstract Method)
1. 정의
본체가 없는 메서드로, 서브클래스에서 반드시 구현해야 함
2. 특징
추상 클래스나 인터페이스에서만 선언 가능
인터페이스에서 선언된 추상 메서드는 암시적으로 public abstract로 간주
서브클래스나 구현 클래스에서 구현을 강제
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound(); //출력: 멍멍
}
}
디폴트 메서드 (Default Method)
1. 정의
인터페이스에서 본체를 가진 메서드
2. 특징
기본 구현을 제공하므로, 구현 클래스에서 재정의하지 않아도 사용할 수 있음
필요에 따라 구현 클래스에서 재정의 가능
기존 인터페이스에 새로운 메서드를 추가하면서도 하위 호환성을 유지할 수 있도록 하기 위해서 도입
interface MyInterface {
default void greet() {
System.out.println("♪(^∇^*)");
}
}
class MyClass implements MyInterface {}
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.greet(); // 출력: ♪(^∇^*)
}
}
정리
종류 | 설명 | 본체 여부 | 호출 방식 | 주요 특징 |
인스턴스 메서드 | 객체를 통해 호출, this와 인스턴스 변수 사용 가능 | 있음 | 구현 클래스의 인스턴스를 통해 호출 | 구현 클래스에서 이미 구현된 상태로 제공, 인스턴스 상태와 상호작용 가능 |
정적 메서드 | 클래스나 인터페이스 이름으로 호출 가능 | 있음 | 클래스명.메서드명 , 인터페이스명.메서드명 |
객체, 구현 클래스와 독립적, 주로 유틸리티로 사용 |
추상 메서드 | 서브클래스에서 반드시 구현해야 함 | 없음 | 구현 클래스의 인스턴스를 통해 호출 | 구현 클래스에서 반드시 구현 필요, 호출 시 실제 동작은 구현 클래스에 의해 정의됨 |
디폴트 메서드 | 기본 구현 제공, 필요에 따라 재정의 가능 | 있음 | 구현 클래스의 인스턴스를 통해 호출 | 인터페이스에서 선언 가능, 기존 구현체와의 호환성 유지, 구현 클래스에서 재정의하지 않으면 기본 구현 사용 |
'Language > JAVA' 카테고리의 다른 글
[JAVA]Stack, Queue 컬렉션(Collection) (2) | 2024.12.25 |
---|---|
[JAVA]List, Set, Map 컬렉션(Collection) (2) | 2024.11.24 |
[JAVA]메모리 구조 (0) | 2024.11.04 |
[JAVA]정적 메소드에서 this를 사용할 수 없는 이유 (2) | 2024.11.03 |
[JAVA]Runnable 인터페이스를 구현해서 스레드를 만드는 이유 (0) | 2024.09.28 |