티스토리 뷰

안녕하세요 박스여우입니다. 프로젝트를 진행하던 도중 Stack Overflow에서 한 소스를 봤는데, static import와 제네릭 메소드라는 개념을 이용하여 코드를 작성했더군요. 저는 왜 그동안 한번도 접해보지 못했던 개념들일까요. 제네릭 클래스는 사용해 봤지만 제네릭 메소드는 사용해보지 못했네요..


그래서 이번에는 이것들을 배우고자 포스팅을 하게 되었습니다.



Static Import

static import는 Java 5.0 부터 추가된 기능입니다. static 메소드나 static 변수에 접근하기 위해 사용하는 import인데요, 정확한 사용방법은 예제를 통해 살펴보도록 하겠습니다.


1
2
3
4
5
6
package com.boxfox.statics;
 
public class StaticTest{
    public static int ONE = 1;
    public static void test(){}
}
cs

요렇게 선언된 Static 멤버와 Static 메소드를 가진 StaticTest라는 클래스가 있습니다. StaticTest 클래스의 static 멤버들을 다른 클래스에서 사용해 보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
package com.boxfox.test;
 
import static com.boxfox.statics.StaticTest.ONE;
import static com.boxfox.statics.StaticTest.test;
 
public class Main{
    public static void main(String args[]){
        System.out.println(ONE);
        test();
    }
}
cs

위처럼 import static 을 통해 StaticTest 클래스의 static 멤버들을 마치 상속받은 멤버와 같이 사용할 수 있습니다. 굉장히 편리한 기능이라고 생각됩니다.


import static은 일반 import처럼 *을 통해 해당 클래스의 모든 static 멤버들에 접근할 수 있습니다. 여기서 잠깐 드는 의문점은 만약 이름이 같은 static 메소드와 static 변수가 선언되어 있다면 import 결과는 어떻게 될까 입니다!


그래서! 테스트해 보았습니다. 결과는 하나의 import 만으로 변수와 메소드를 사용할 수 있었습니다. 뭐.. static import에 딱히 메소드와 변수를 구별할 수 있는 방법이 없으니..



제네릭 메소드

제네릭은 Java에서 아주 중요한 개념으로 C++의 템플릿과 비슷합니다. 제네릭을 자주 만날 수 있는 곳은 ArrayList와 같은 Java Collection Framework입니다. 제네릭 클래스에 대한 내용은 알고 있기 때문에 이번 포스팅에서는 제네릭 메소드만 다루도록 하겠습니다.


1
2
3
4
5
6
7
public <T> Test<T> generic(List<T> original) {
    return new Test<T>(original);
}
    
public <T> int generic2(Object original) {
    return 1;
}
cs

위의 두 메소드는 모두 제네릭 메소드 입니다. 제네릭 메소드의 선언 양식은 다음과 같습니다.

- 접근제한자 <T> 리턴타입 메소드이름(매개변수)


generic2 메소드와 같이 제네릭을 다루지 않아도 제네릭 메소드로 선언해도 되지만, 1번과 같이 제네릭을 사용하는 메소드에서 제네릭 메소드로 선언하지 않으면 오류가 발생합니다.


선언된 제네릭 메소드는 일반적인 메소드처럼 사용됩니다.



마무리

포스팅을 시작하기 전에는 뭔가 큰 개념, 복잡한 지식일 줄 알았는데 막상 포스팅을 마치고 나니 별것 아닌것 처럼 느껴지네요.



댓글
댓글쓰기 폼
Total
354,596
Today
15
Yesterday
658
링크
«   2019/11   »
          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
글 보관함