[JAVA_Back-End]

어노테이션 / 오버라이딩 및 오버로딩 본문

Programming/JAVA

어노테이션 / 오버라이딩 및 오버로딩

너굴위 2024. 2. 7. 23:32
728x90
반응형

어노테이션 (@)

- 인터페이스를 기반으로 한 문법으로 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입
- 컴파일러에게 문법 에러를 체크하도록 정보를 제공
- 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있도록 정보를 제공
- 런타임에 특정 기능을 실행하도록 정보를 제공


어노테이션의 종류

표준 어노테이션: 자바에서 기본적으로 제공하는 어노테이션

  • @Override: 컴파일러에게 메서드를 오버라이딩하는  것이라고 알림. 컴파일 타임에 오버라이딩에 대한 안정성을 부여함.
  • @Deprecated: 앞으로 사용하지 않을 대상임을 알림
  • @FunctionalInterface: 함수형 인터페이스라는 것을 알림
  • @SuppressWarning: 컴파일러가 경고 메시지를 나타내지 않음
  • @SafeVaragrs: 제네릭과 같은 가변 인자의 매개변수를 사용할 때의 경고를 나타내지 않음

메타 어노테이션: 어노테이션에 붙이는 어노테이션 (어노테이션을 정의하는 데 사용)

  • @Target: 어노테이션을 정의할 때 적용 대상을 지정하는 데 사용
  • @Documented: 어노테이션 정보를 javadoc으로 작성된 문서에 포함시킴
  • @Inherited: 어노테이션이 하위 클래스에 상속되도록 함
  • @Retention: 어노테이션이 유지되는 기간을 정하기 위해 사용함
  • @Repeatable: 어노테이션을 반복해서 적용할 수 있도록 함

사용자 정의 어노테이션: 사용자가 직접 정의하여 사용하는 어노테이션


 오버라이딩과 오버로딩

 

오버로딩(OverLoading)

-> 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.

public class Example{
	public int Test(int i, int j){
		return i-j;
	}

	public int Test(int i, int j, int k){
		return i+j+k;
	}
	public int Test(double i, double j){
		return i*j;
	}
}

public static void main(String args[]){
	Example ex = new Example();

	int i = ex.Test(3,4);
	int j = ex.Test(4,5,6);
	int k = ex.Test(2.3,4.5);
}

=> 동일한 메소드의 이름을 사용하여 사용의 편리성과 다형성을 실현

오버로딩의 조건 및 특징

  • 메서드 이름이 같아야 한다.
  • 매개변수 유형이나 파라미터 개수, 순서가 달라야 한다.
  • 반환값을 통일하지 않아도 된다.
  • 메서드의 이름, 매개변수 유형, 개수가 다 같고 리턴값만 다르면 성립X

오버라이딩(Overriding)

-> 상위 클래스의 메소드를재정의 하는 것을 의미함. 또는 부모 클래스를 상속받아도 자식 클래스에서 같은 형태(이름, 매개변수 동일)의 클래스를 재정의하면 자식 메서드가 적용된다.

Class Main{
	public static void main(String[] args) throws IOException{
		Animal animal = new Animal();
		animal.cry();
	
		Cat cat = new Cat();
		cat.cry();
	
		Dog dog = new Dog();
		dog.cry();
	}

	static class Animal{
		void cry(){
			System.out.println("히잉“);
		}
	}

	static class Cat extends Animal{
		@Override
		void cry(){
			System.out.println("야옹”);
		}	
	}

	static class Dog extends Animal{
		@Override
		void cry(){
			System.out.println("멍멍“);
		}
	}
}


오버라이딩을 사용하는 경우

- 자식 class에서 부모 class와 다르게 동작하고 싶을 때
- 자식 class간에도 서로 다르게 동작하고 싶을 때 새로 정의해서 사용

728x90
반응형

'Programming > JAVA' 카테고리의 다른 글

클래스 / 객체 / 정적(Static)  (1) 2024.02.13
[JAVA] 인터페이스 / 추상 클래스  (0) 2024.02.10
Collection Framework와 Generic  (0) 2024.02.06
JVM과 JAVA 실행방식  (0) 2024.02.06
[JAVA] 데이터 출력 (xml, json)  (0) 2023.09.21