티스토리 뷰

Java

이름 재사용 관련된 용어들

LichKing 2017. 11. 8. 10:05

프로그래밍을 하다보면 이런저런 상황에 이름이 겹치는 경우가 발생한다. 가장 대표적인건 오버라이딩이나 오버로딩과 같은 것들도 이름이 겹치는걸 활용한 기법이라고 볼 수 있다. 그 용어들에 대한 내용을 정리한다.


1. 오버라이딩

하위 클래스에서 상위 클래스 혹은 인터페이스의 메서드 시그니처를 동일하게 작성하여 말 그대로 메서드를 재정의 하는 것. 어떤 메서드를 호출할지는 동적으로 정해지며(동적 디스패치) 다형성의 핵심이 되는 기능.

* 동적디스패치 포스팅 : http://multifrontgarden.tistory.com/133


interface Testable{
void test();
}

class OverrideTest implements Testable{
@Override
public void test() {
System.out.println("Hello Override");
}
}


2. 오버로딩

메서드의 이름은 같게하고 인자의 타입이나 개수를 달리 정의하여 동일한 이름으로 여러 메서드를 정의하는 기능. 어떤 메서드를 호출할지는 정적으로 정해짐.


class OverloadTest {
public void test(int number) {
System.out.println("Hello Overload :: " + number);
}

public void test(String string) {
System.out.println("Hello Overload :: " + string);
}
}


3. 하이딩

오버라이딩이 되는 대상은 일반 메서드이다. 일반메서드를 제외한 필드, 정적 메서드 등을 하위 클래스에서 동일한 명칭으로 선언하면 하이딩이 발생한다.


public class Test {
public static void main(String[] args) {
// Super#test 메서드를 Sub#test 메서드가 하이딩한다.
Sub.test();

// Super#test 를 호출하려면 Super를 써야한다.
Super.test();
}
}

class Super {
public static void test() {
System.out.println("hello world");
}
}

class Sub extends Super {
public static void test() {
System.out.println("goodbye world");
}
}


4. 섀도윙

변수나 메서드, 클래스, 인터페이스의 명칭을 같은 영역에서 동일하게 사용할 경우 발생. 기본적으론 권장하지않는 사용이지만 대표적으로 생성자나 getter, setter 에서 많이 사용한다.


class Person {
private String name;

public Person(String name) {
// 이것도 섀도윙이다. name을 내부 스코프에서 가려버렸기때문에 외부 스코프참조를 위해 this를 이용한다.
this.name = name;
}
}


5. 모호화

변수나 클래스, 인터페이스의 이름이 같은 경우를 말한다. 보통은 변수를 가장 우선적으로 찾게되는데 기본적인 네이밍 컨벤션만 잘 지켜도 이런일이 발생할 경우는 거의 없다.

* 클래스는 대문자로시작, 변수는 소문자로시작 등


class Person {
private String Person;

public static void method(){
System.out.println("hello world");
}

public Person(){
// 정적 메서드인 method를 호출하고싶지만 Person은 클래스가 아니라 변수를 선택하므로 호출할 수 없다.
Person.trim();

// method를 호출하기위해선 패키지명까지 정해줘서 명확하게 표현해줘야한다.
com.main.java.Person.method();
}
}


참고

자바퍼즐러

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함