오버로딩(overloading) vs 오버라이딩(overriding)

Hyun·2023년 4월 16일
0

java

목록 보기
1/2

자바를 공부할 때 가끔 메소드에 빨간 줄이 떠서 확인해보면
오버라이드 어노테이션을 붙여달라고 할 때가 있었다.
그러면 그냥 필요한가보다..하고 클릭 한 번으로 빨간줄을 없애곤 했는데

요즘 초급 강의를 들으면서 드디어 오버라이딩을 하는 이유와 오버로딩의 차이점도 알게 되었다.

이런걸 보면 진짜 6개월동안 어떻게 공부를 한건지.. 취직은 어떻게 한 건지 나조차도 의문일 때가
많다.. 뭐 지금이라도 알아가는걸 다행이라고 생각해야되나..



1. 오버로딩(overloading)

: 기존에 없는 새로운 메소드를 정의(new)

기본 생성자와 매개변수가 있는 생성자를 생각하면 편할 것 같다.

class Test {
	int x;
    
	public Test() {
    	super();
    }
    
    public Test(int x, int y) {   // 오버로딩
    	this.x = x;
        this.y = y;
    }
}

2. 오버라이딩(overriding)

: 상속받은 메소드의 내용을 변경

class Test {  // 부모 클래스
	int x;
    int y;
    
    public String test() {
	    return "x : " + x + ", y : " + y;
    }
}

class Test2 extends Test{  // 자식 클래스
	int z;

	@Override		// 오버라이딩 했다고 알려주는 어노테이션
	public String test() {		// 부모의 test() 메소드 오버라이딩
		return "x : " + x + ", y : " + y + ", z : " + z;
	}
}

class Test3 {
	public static void main(String[] args) {
		Test t1 = new Test();
		Test2 t2 = new Test2();
		
		t1.x = 8;
		t1.y = 2;
		
		t2.x = 4;
		t2.y = 6;
		t2.z = 10;
		
		
		System.out.println(t1.test());  // 부모 클래스의 test()
		System.out.println(t2.test());  // 자식 클래스의 test()
		
	}
}
// 결과
x : 8, y : 2
x : 4, y : 6, z : 10

Test2 클래스에서 test()를 오버라이딩 하지 않고
test2()로 다른 메소드를 만들어 줄 수도 있지만 굳이 오버라이딩을 하는 이유는
같은 기능을 하는 메소드라는 것을 알려줄 수 있기 때문에




그렇다면 @Override 어노테이션의 역할은?

: 부모의 메소드로부터 오버라이딩 됐다고 알려주는 역할


@Override을 쓰지 않으면 부모의 메소드을 오버라이딩 했다는 점을 모를 수도 있고,
만약 오타가 났을 때 다른 메소드로 인식해버린다.
@override를 사용했는데 부모 메소드의 이름이 다르거나 없다면 빨간줄 쭈욱~




위의 코드를 더 간단하게 작성하려면 java에 내장되어 있는 toString() 메소드를 사용하면 된다.

근데 toString()은 @override가 따로 안 먹는 것 같다..
Test 클래스의 toString() 오타났었는데 @Override가 안 잡아줘서 한참을 해멨다..
(왜 안 잡아주는거지..)

package practice;

class Test {
	int x;
    int y;
    
    public Test() {  // 기본 생성자
	
    }

	public Test (int x, int y) {
		this.x = x;
		this.y = y;
	}

	public String toString() {
	    return "x : " + x + ", y : " + y;
    }
}



class Test2 extends Test{
	int z;	

	public Test2(int x, int y, int z) {
		super(x, y);
		this.z= z;
	}

	@Override
	public String toString() {
		return "x : " + x + ", y : " + y + ", z : " + z;
	}
}


public class Test3 {
	public static void main(String[] args) {
		Test t1 = new Test(3,5);
		Test2 t2 = new Test2(1, 7, 10);
				
		System.out.println(t1.toString());
		System.out.println(t1);
		System.out.println(t2.toString());
		System.out.println(t2);
		
	}
}

// 결과
x : 3, y : 5
x : 3, y : 5
x : 1, y : 7, z : 10
x : 1, y : 7, z : 10

위 내용은 자바의 정석 유튜브를 참고하여 작성하였습니다.

profile
내가 바로 코린이

0개의 댓글