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

쿠케캬캬님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

상품 수정

상품수정에서 book 타입 캐스팅 질문입니다.

작성

·

182

0

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

[질문 내용]
상품 수정할때 updateItemForm 메서드를 작성하면서

Book item = (Book) itemService.findOne(itemId);

이 코드를 작성하는데, 이게 가능하려면 itemService.findOne 메서드에서 리턴하는 객체가 원래 업캐스팅됐던 객체여야 가능한거 아닌가요?

itemService.findOne은 itemRepository.findOne(itemId)을 리턴하고, ItemRepository의 findOne은 em.find(Item.class, id) 을 리턴합니다.

이 과정에서 언제 업캐스팅 되는건가요? 혹시 질문이 잘못 됐거나 제가 잘못 알고 있는 내용이 있다면 설명해주시면 감사하겠습니다.

답변 2

0

안녕하세요. 쿠케캬캬님, 공식 서포터즈 OMG입니다.

DB의 ITEM 테이블이 존재할 때

Repository에서 Item클래스와 id를 인자로 조회하여 Item 클래스를 찾아 반환합니다.

image

ItemService의 findOne은 Repository의 findOne을 호출합니다. (반환타입은 Item으로 그대로 전달됩니다)

image

Book item = (Book) itemService.findOne(itemId);

은 부모(ITEM)을 자식(BOOK)으로 다운캐스팅이 발생하는 상황으로 흐름을 정리할 수 있을 것 같은데요,

무엇이 궁금하신지에 대해 고민해보니 다운캐스팅까지는 잘 이해하신 것 같아요.

제가 생각하기로 ItemRepository에서 Item클래스 껍데기 혹은 구조를 첫번째 인자로 전달하여 Item클래스로 반환하는 부분을 놓치신 것 같은데 맞을까요? 😀

감사합니다.

0

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

쿠케캬캬님께서 질문하신 “상품수정에서 book 타입 캐스팅”과 관련해 질문하신 부분에 대해, 상품 수정 과정에서의 타입 캐스팅 및 업캐스팅과 관련된 내용을 담고 있는 유사한 질문의 답변을 찾았습니다.

이와 관련하여, “수정강의부분에서 캐스팅이라는게 어떤건가요?” 이 질문에서 현지훈님이 유사한 궁금증을 표현하셨고, 공식 서포터즈 OMG님이 형변환(캐스팅)에 대한 기본적인 설명을 제공한 바 있습니다.

이 질문에서 형변환은 소스 코드상에서 한 타입에서 다른 타입으로 명시적으로 변환하는 것을 의미합니다. 예를 들어, Book 타입으로 명시적으로 변환하는 것을 “업캐스팅” 이라고 합니다. JPA에서 em.find(Class<T> entityClass, Object primaryKey) 메서드는 특정 엔티티 클래스의 인스턴스를 조회할 때 사용되며, 이 메서드는 조회된 엔티티의 실제 타입을 반환합니다. 따라서, Item의 하위 클래스인 Book 인스턴스를 조회하고 있지만, 반환 타입은 상위 클래스인 Item으로 설정되어 있어서 명시적으로 하위 타입으로 캐스팅하는 것입니다.

그러나 이 과정에서 상위 클래스(Item)에서 하위 클래스(Book)으로의 캐스팅은 개발자가 명시적으로 진행하는 부분입니다. 실제 코드상에서 업캐스팅이 발생하는 지점은 Item 타입의 변수에 Book 인스턴스가 할당될 때 자동으로 발생하며, 이러한 업캐스팅은 자바(JAVA)의 상속 구조에서 자연스러운 현상입니다. 반대로 Book item = (Book) itemService.findOne(itemId);와 같이 하위 타입으로 명시적으로 캐스팅하는 경우는 개발자가 해당 객체가 실제로 해당 하위 타입의 인스턴스임을 알고 있을 때 사용합니다.

이 답변이 쿠케캬캬님의 질문에 대한 궁금증을 해소하는 데 도움이 되길 바랍니다. 형변환은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 해당 객체가 다양한 타입으로 다루어질 수 있음을 의미합니다. 형변환에 관한 더 자세한 내용을 이해하기 위해서는 자바의 상속과 다형성에 대한 기초 지식이 필요합니다.

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