인프런 커뮤니티 질문&답변

ekgml님의 프로필 이미지
ekgml

작성한 질문수

김영한의 실전 자바 - 중급 2편

제네릭 적용

T 타입 -> Integer 타입

작성

·

51

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

package generic.ex1;

public class BoxMain3 {
    public static void main(String[] args) {
        GenericBox<Integer> integerBox = new GenericBox<Integer>();
        integerBox.set(10);
        // integerBox.set("문자"); // integer 타입만 허용, 컴파일 오류 발생
        Integer integer = integerBox.get();
    }
}

GenericBox<integer> 이렇게 작성하면 T 타입이 Integer로 바뀐거라고 하셨는데 그러면 Integer integer = integerBox.get();을 굳이 안 해도 되고 integerBox.get();이렇게만 적어줘도 되는 거 아닌가요? 또 다시 Integer 타입으로 설정해주는 이유는 무엇인가요?

답변 2

0

안녕하세요. ekgml님, 공식 서포터즈 코즈위버입니다.

공유해주신 코드 상으로 보면, 말씀하신것처럼 integerBox.get(); 만 사용하여도 무방합니다.

가령 코드를 아래와 같이 수정하여도 문제가 없습니다.

public class BoxMain3 {
    public static void main(String[] args) {
        GenericBox<Integer> integerBox = new GenericBox<Integer>();
        integerBox.set(10);
        System.out.println(integerBox.get());
    }
}

 

말씀해주신 코드의 좌항 (Integer integer) 는 값을 담아두기 위한 임시변수일 뿐입니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. ekgml님.

제네릭 타입을 사용할 때의 특성과 Integer 타입 변수에 대한 보다 자세한 이해를 돕기 위해 아래와 같이 몇 가지 설명과 함께 유사한 기존 답변을 안내해 드립니다.

먼저, 제네릭 클래스 GenericBox<T>에서 타입 파라미터 T는 사용할 때 실제 타입으로 치환됩니다. 예를 들어 GenericBox<Integer>로 인스턴스를 생성하게 되면 TInteger 타입으로 치환됩니다. 하지만 여전히 integerBox.get()이 반환하는 값은 Integer 타입이므로 이를 받을 변수도 타입을 명시적으로 적어주는 것이 일반적입니다. 이는 자바의 문법 규칙에 따른 것이고 가독성을 유지하기 위함이기도 합니다.

아래의 링크들을 참고해 주세요:

간단한 요약:

  1. 제네릭 클래스: GenericBox<T>에서 T를 Integer로 치환하여 사용할 때는 GenericBox<Integer>로 선언합니다.
  2. 타입 명시성: integerBox.get()이 반환하는 값 타입을 명시적으로 사용할 변수에 설정해주는 것은 코드 가독성을 높이고 명확하게 하기 위해 중요합니다.
  3. 타입 안전성: 제네릭을 사용하면 컴파일 타임에 타입 검사를 통해 타입 안전성을 보장받을 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ekgml님의 프로필 이미지
ekgml

작성한 질문수

질문하기