Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[생활코딩-자바입문] 핵심 요약 본문

Java

[생활코딩-자바입문] 핵심 요약

JH_Lucid 2020. 11. 6. 00:15

생활코딩 27~29. 오버라이딩 / 오버로딩 / 클래스패스

 

1) 창의적인 상속

 

오버라이딩은 '재정의', '새롭게 정의한다'라는 의미이다. 복습하자면 오버라이딩은 부모의 메소드를 자식이 덮어 씌워 자신의 메소드로 변경한다는 것을 의미한다. 즉 재정의한다.

 

 

2) 오버라이딩 제약 사항

 

부모 클래스의 메소드와 자식 클래스의 메소드 반환타입은 꼭 일치해야 한다.

또한 메소드의 이름도 같아야 하며, 매겨변수가 있을 때 그것 역시 같아야 한다. 이 같은 형식을 메소드의 서명(signature)이라고 한다.

 

  • 메소드의 이름

  • 메소드 매개변수의 개수와 데이터 타입, 순서

  • 메소드의 반환 타입

만약, 부모와 자식이 똑같은 로직(메소드 내용)을 가질 때, 이는 중복이며 제거해야 한다. 다시 말해 부모 클래스의 메소드가 이미 가진 로직을 자식에서 다시 한번 정의하지 않게 하려면 super를 사용하면 된다.

부모 클래스 메소드의 동작에 부가 동작을 추가하고 싶다면, super.avg() 이렇게 부모 메소드를 호출한 후, 추가하고 싶은 로직을 추가한다.

class Calculator {
	int left, right;
	
	public void setoperands(int left, int right) {
		this.left = left;
		this.right = right;
	}
	
	public void sum() {
		System.out.println(this.left + this.right);
	}
	
	public int avg() {
		return ((this.left + this.right)/2);
	}
}
class testcal extends Calculator {
	public int avg() {
		System.out.println("추가 logic 구현");
		return super.avg();
	}
}

 

3) 오버로딩 + 제약사항

 

오버로딩은, 메소드 정의 시 이름이 같지만 서로 다른 매개변수 형식을 지닌 메소드를 여러 개 정의할 수 있는 방법이다.

바로 제약 사항을 보자.

오버로딩에서는 메소드의 매개변수 형식이 같더라도, 반환형이 달라지면 오류가 발생한다.

반환형은 메소드를 사용하는 단계에서 알려줄 수 있는 정보가 아니라, 메소드를 사용한 결과이다. 만약 void A( )라는 메소드와 int A( ) 메소드가 중복으로 있을 경우, 어떤 기준으로 void / int를 반환할지 모호해진다. 따라서 이런걸 미리 방지하고자 함이다.

 

 

 

4) 컴파일과 클래스

 

아래는, ClasspathDemo.java를 javac를 이용하여 컴파일 한 결과이다. java 파일 내에는 두 가지 class를 선언해 두었으며, 컴파일 결과로 두 가지 class가 'class' 파일 형식으로 각각 생성되었음을 보인다.

 

Comments