728x90
반응형
상속에 대해서 공부를 하던 와중에 @Override 애노테이션을 사용하는 경우와 사용하지 않았을 경우의 차이점에 대해서 알려드리려고 합니다.
@Override 애노테이션을 사용하는 경우와 사용하지 않는 경우의 접근 방식에 대해 이해하기 위해서는 객체 지향 프로그래밍의 기본 개념과 Java의 동작 방식을 이해하는 것이 중요합니다.
객체와 클래스 접근의 차이
- 클래스 접근: 정적(static) 메서드나 필드에 접근할 때 사용. 정적 메서드나 필드는 클래스 레벨에서 존재하며 객체 인스턴스와는 무관.
- 객체 접근: 인스턴스 메서드나 필드에 접근할 때 사용. 객체 인스턴스는 클래스의 특정 상태를 갖는 복사본이며, 인스턴스 메서드는 객체의 상태를 조작하거나 반환할 수 있음.
@Override와 객체 접근
@Override 애노테이션은 메서드가 상위 클래스의 메서드를 재정의하고 있음을 명시하는 애노테이션입니다. 이는 인스턴스 메서드에 대해서만 의미가 있습니다. 정적 메서드는 재정의할 수 없으며, 클래스 레벨에서 존재합니다.
인스턴스 메서드와 정적 메서드
- 인스턴스 메서드 : 객체를 통해 접근. 인스턴스 메서드는 객체의 상태를 필요로 하며, 객체의 상태를 조작하거나 반환. 아래의 코드에서 display 메서드는 인스턴스 메서드이므로 객체를 통해 접근해야 함. obj.display()를 호출하면 SubClass의 display 메서드가 호출됨.
class SuperClass {
void display() {
System.out.println("SuperClass display()");
}
}
class SubClass extends SuperClass {
@Override
void display() {
System.out.println("SubClass display()");
}
}
public class Main {
public static void main(String[] args) {
SuperClass obj = new SubClass();
obj.display(); // SubClass display() 호출
}
}
- 정적 메서드 : 클래스 이름을 통해 접근. 정적 메서드는 클래스 레벨에서 존재하며, 객체의 상태와 무관하게 작동. 아래의 코드에서 display 메서드는 정적 메서드이므로 클래스 이름을 통해 접근. SuperClass.display()와 SubClass.display()를 각각 호출하여 해당 클래스의 정적 메서드를 호출할 수 있음
class SuperClass {
static void display() {
System.out.println("SuperClass display()");
}
}
class SubClass extends SuperClass {
static void display() {
System.out.println("SubClass display()");
}
}
public class Main {
public static void main(String[] args) {
SuperClass.display(); // SuperClass display() 호출
SubClass.display(); // SubClass display() 호출
}
}
결론
- @Override 애노테이션은 인스턴스 메서드에만 적용되며, 객체를 통해 접근해야 함. 이 경우, 재정의된 메서드가 실행됨.
- 정적 메서드는 클래스 레벨에서 존재하며, 재정의할 수 없음. 따라서 클래스 이름을 통해 접근함.
@Override 애노테이션을 사용하는 경우에는 인스턴스 메서드를 재정의하고 객체를 통해 접근해야 합니다. 반면, 정적 메서드는 클래스 이름을 통해 접근합니다. 이로 인해 @Override 애노테이션을 사용하는 경우에는 객체 접근을, 사용하지 않는 경우에는 클래스 접근을 하는 것이 일반적인 이유입니다.
https://github.com/bottomsUp-99?tab=repositories
728x90
반응형
'Java Study' 카테고리의 다른 글
인터페이스(Interface) (0) | 2024.07.02 |
---|---|
추상화 (3) | 2024.07.01 |
상속(Inheritance)이란? (0) | 2024.06.28 |
참조 타입이란? (2) | 2024.06.21 |
객체지향 프로그래밍에 대해서... (0) | 2024.06.21 |