TIL

2023년 10월 24일

정유감 2023. 10. 25. 21:52
728x90
반응형
뭘 했길래 시간이 이리 빠르지
정신 차려보니 밤인데

package import

작은 의문이 들었다.
같은 이름의 클래스가 서로 다른 패키지에 존재할때
다른 클래스나 메인에서 두 패키지를 모두 import 한다면

해당 클래스들은 어떻게 불러 올 수 있는가?

애초애 그런 행위를 하면 안되나?
혹은 overload 시키듯 구분할 수 있는 여지를 두면
JVM이 알아서 처리를 하는가?

overload VS override

해당 의문을 해결하기 위해 검색해보던 도중 내가 overloadoverride의 구분을 모른다는것을
알게 되었다.

overloading은 이름이 같은 메서드에 매개변수 차이를 주는것

public void print(int x) {
    System.out.println(x);
}
public void print(double y) {
    System.out.println(y);
}

override는 상속 관계에 있는 SuperClass(부모)의 메서드를
SubClass(자식)에서 재 정의 하는것

class Parent {
    public void display() {
        System.out.println("부모 클래스의 display 메서드");
    }
}

class Child extends Parent {
    @Override
    public void display() {
        System.out.println("자식 클래스의 display 메서드");
    }
}

좋다. 그렇다면 이제 다시 돌아와서 나의 의문에 대한 가설은
overload 에 해당한다는것을 잘 알게 되었다.

하여 조사를 하다보니 일단 궁금증에 문제가 있다는걸 깨닫게 되었다.
실제로 혼자 진행하는것이 아닌 협업 프로젝트나 큰 규모의 프로젝트에서는
이러한 충돌을 방지하기 위해 네이밍에 규칙을 둔다고 한다.

다만 만약에 빡대가리 두명 나같은 이 고집을 부려 같은 이름의 class를 생성해 두었다면
package가 모두 import되어 있는 상황이라고 해도
해당 packageClass명 앞에 명시해주면 된다.

import package1.Animal;
import package2.Animal;

public class Main {

    public static void main(String[] args) {

        package1.Animal animal1 = new package1.Animal();
        package2.Animal animal2 = new package2.Animal();

    }

}

궁금증이 해소 되고서야 느끼는거지만 굳이 이런걸 궁금해 할 필요는 없었던것 같다.

728x90
반응형