티스토리 뷰
안녕하세요 박스여우입니다. 프로젝트를 진행하던 도중 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번과 같이 제네릭을 사용하는 메소드에서 제네릭 메소드로 선언하지 않으면 오류가 발생합니다.
선언된 제네릭 메소드는 일반적인 메소드처럼 사용됩니다.
■ 마무리
포스팅을 시작하기 전에는 뭔가 큰 개념, 복잡한 지식일 줄 알았는데 막상 포스팅을 마치고 나니 별것 아닌것 처럼 느껴지네요.
'프로그래밍 > java' 카테고리의 다른 글
Java 8 - Default Method (3617) | 2017.06.08 |
---|---|
Spring - 한번에 끝내는 Spring 개발환경 셋팅 (3629) | 2017.01.15 |
Maven - 실행 가능한 Jar 파일 만들기 (3516) | 2017.01.14 |
Maven - 다중 모듈 프로젝트 구성 (4671) | 2017.01.13 |
GUI 프레임워크에서 단일 쓰레드만을 사용하는 이유 (5067) | 2016.12.27 |