제너릭은 컬렉션 또는 자료구조에서 특정 타입의 데이터만 입력할 수 있도록 미리 지정해 놓는 기법을 말합니다.
List계열 프레임워크의 한 종류인 Vector을 선언할 때 <>표시가 바로 제네릭인데요..
Vector<Object> vect = new Vector(); <-- 선언한 vect는 Raw타입입니다.
Object는 모든 클래스의 조상격이므로
객체면 아무거나 다 들어갈 수 있습니다.
Vector<타입> vec = new Vec<타입(-->여기는 써도 되고 안써도 되고)>();
-->이러면 해당 타입만 add(데이터)됩니다.
--> 이로써 add()할 때, 미리 타입을 선별할 수 있다.
보시다시피 에러는 나지 않지만 Vector가 raw라는 경고가 표시됩니다.
vec는 Vector<Integer>타입으로 선언되었으므로 vec라는 "가방"에는 Integer클래스의 객체만 들어갈 수 있습니다. 따라서 19행이 오류가 납니다.
Vector선언 시 제네릭으로 선언한 <타입>만 들어올 수 있다는 것을 자동완성 기능에서 확인 할 수 있습니다.
vec.add()의 매개변수는 Integer클래스의 객체입니다.
이제 뜬금없지만 static 메서드의 호출 방법에 대해서 공부해보도록 합시다.
VectorTest안에 static 메서드를 선언하고 그 메서드를
1) VectorTest의 main에서 호출할 때,
2) VectorTest2의 main에서 호출할 때,
3) 아예 다른 패키지의 다른 소스파일에서 호출할 때
순서로 실습합니다.
일단, static 메서드를 VectorTest에 선언합니다.
이 함수의 기능은
Vector를 매개변수로 전달받아
그 Vector의 수용 가능 용량과 실제 담긴 개수를 출력합니다.
1) static함수를 VectorTest의 main에서 호출할 때 : 같은 클래스 내의 static메서드 호출
같은 클래스안의 static메서드를 호출할 때는 단순히 메서드 명만으로 호출합니다.
2) VectorTest2의 main에서 호출할 때 : 같은 패키지 안의 다른 소스파일에서 호출
같은 패키지 안에 있지만 다른 클래스에 속한 static메서드는를 호출하려면
그 메서드가 속한 클래스.메서드명으로 호출한다.(17행)
3) 아예 다른 패키지의 다른 소스파일에서 호출할 때 : 패키지가 아예 다를 때
이 경우도 2번과 같이 static메서드가 속한 클래스.메서드명으로 호출하면 됩니다.
하지만 이 때는 주의해야할 점이 2가지 있습니다.
① static메서드를 다른 패키지에서 사용하도록 하려면 메서드를 public으로 공개해야한다. ② static메서드가 속한 클래스를 import해야 한다.
① static메서드를 다른 패키지에서 사용하도록 하려면
메서드를 public으로 공개해야한다.
② static메서드가 속한 클래스를 import해야 한다.
static메서드가 속한 클래스.메서드명으로 호출하면 됩니다.
댓글 없음:
댓글 쓰기