secuware
@secuware
Reviews Written
1
Average Rating
5.0
Posts
Q&A
์ฐ๊ด๊ด๊ณ ๋งคํ ์ด๋ค์์ผ๋ก ํด์ผ๋ ์ง ๊ฐ์ด ์์กํ๋๋ค.
ํ์(User) ์ํฐํฐ๊ฐ ์๊ณ ํ์์ ์๋ฐฉํ์(UserFire) , ๋ณ์ํ์(UserDoctor)์ผ๋ก ๋๋ฉ๋๋ค ๊ทธ๋์ ํ์ ํ ์ด๋ธ์ ํ์๊ณผ ๊ด๋ จ๋ ๊ณตํต๋ ์ ๋ณด๋ฅผ ์๋ฐฉํ์ ํ ์ด๋ธ์ ์๋ฐฉ ๊ด๋ จ ํ์ ์ ๋ณด๋ฅผ ๋ณ์ํ์ ํ ์ด๋ธ์ ๋ณ์ ๊ด๋ จ ํ์ ์ ๋ณด๋ฅผ ๋ฃ๊ณ ์ถ์ต๋๋ค. ์ฌ๊ธฐ๊น์ง ์์ ์ฐ๊ด๊ด๊ณ๋ก ํ๋ฉด ๋๋ค๋๊ฑธ ์๊ณ ์๊ณ ์๋ฐฉํ์์ด ํ์ํ ๊ธฐ๋ฅ์์ ์๋ฐฉํ์์ ๋ถ๋ฌ์ค๊ณ ๋ณ์ํ์์ด ํ์ํ ๊ธฐ๋ฅ์์ ๋ณ์ํ์์ ๋ถ๋ฌ์ค๋ฉด ๋๊ฒ ์ง๋ง ์์๊ตฌ์กฐ๋ก ํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์๊ฒ์ ์ด๋ป๊ฒ ํด์ผ๋ ๊น์ ๋ํด์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. 1. ๋ก๊ทธ์ธ ๋ก๊ทธ์ธํ ๋๋ ์ด ์ฌ๋์ด ์๋ฐฉ์ธ์ง ๋ณ์์ธ์ง ๋ชจ๋ฅด๋ฏ๋ก User๋ก ๋ฐ์ ์จ๋ค if(user instanceof Fire) { } ์ ๊ฐ์ ๊ณผ์ ์ผ๋ก ๋๊ตฌ์ธ์ง๊น์ง ์์๋ธ๋ค๊ณ ํด๋ ๋งค๋ฒ ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ฅผ ํ์ธํด์ผ๋๋ ๋ก์ง์์ instanceof ํ๋ ๊ณผ์ ์ผ๋ก ํ๋ณํ์ด User -> UserFire or UserDoctor๋ก ์ด๋ฃจ์ด์ง๋ ๋ก์ง์ด ์์ด์ผ๋๋๊ฑด๊ฐ? ๋ผ๋ ๊ณ ๋ฏผ์ด ์์ต๋๋ค. ๊ทธ๋ฅ User์ ์ด์ฌ๋์ด ์๋ฐฉ์ธ์ง ๋ณ์์ธ์ง ํ๋ ์ ๋ณด๊ฐ ๋ณ์๋ก ๋ค์ด๊ฐ์์ด์ ํ์ธ์ ์ด๋ ต์ง ์๋ค ํ๋ค ๊ฒฐ๊ตญ ๊ทธ ์์ธ ์ ๋ณด(์๋ฐฉ, ๋ณ์)์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ํ๋ณํ์ด ์ด๋ค์ ธ์ผ ํ๋๊ฒ ๋ง๋์? 2. ์ฌ์ฉ์ ๋ฆฌ์คํธ ๋ถ๋ฌ์ฌ๋ ์๋ฐฉ ์ฌ์ฉ์ ๋ชฉ๋ก ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์๊ฑฐ๋ ๋ณ์ ์ฌ์ฉ์ ๋ชฉ๋ก ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์ ์ด์ ๋ฆฌ์คํธ๋ฅผ ์กฐํํ ๋ ๊ฐ๊ฐ ๋ฐ์ผ๋ฉด ๋๋ ๋ฌธ์ ์ง๋ง List ์ ์ฒด์ฌ์ฉ์ = userRepository.findAll() ํด์ผ๋๋ ๊ฒฝ์ฐ๋ ์กด์ฌํฉ๋๋ค. ์ด๋๋ ๋ฐ์์จ ์ฌ์ฉ์๋ฅผ for(User user : ์ ์ฒด์ฌ์ฉ์){ if(user instanceof UserFire){ } if(user instanceof UserDoctor){ } } ์ด๋ฐ ๋ก์ง์ ๋๋ฉด์ ํ ๋ณํ์ ํด์ค์ผ ํ๋์. ์๋ฐฉ์ฌ์ฉ์ ๋ชฉ๋ก , ๋ณ์์ฌ์ฉ์ ๋ชฉ๋ก ๋ถ๊ธฐํด์ ๋ฆฌํดํ๋๊ฒ ์๋๋ผ ์ ์ฒด์ฌ์ฉ์(๊ฐ๊ฐ ํ๋ณํ ๋์ด์๋)๋ก ๋ฆฌํด ํ๊ณ ์ถ์๋ฐ ์ด๋ด๋ ์ด๋ป๊ฒ ํ๋์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ๊ทธ๋ฅ List๋ก ๋ฆฌํดํ๋ฉด User ์ํฐํฐ์ ์๋ ์ ๋ณด๋ค๊น์ง๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง ๋๋จธ์ง ์ ๋ณด๋ค์ ์ ๊ทผ์ด ์๋๋๊น์ ์ด๊ฒ๋ ์ค๋ช ์ด ํก์ค์์ค ๊ฐ์๋ฐ users : {[ 0: { ์ฌ์ฉ์์ ๋ณด..., ์๋ฐฉ์ ๋ณด }, 1: { ์ฌ์ฉ์์ ๋ณด..., ์๋ฐฉ์ ๋ณด }, 2: { ์ฌ์ฉ์์ ๋ณด..., ์์ฌ์ ๋ณด }, 3: { ์ฌ์ฉ์์ ๋ณด..., ์๋ฐฉ์ ๋ณด }, 4: { ์ฌ์ฉ์์ ๋ณด..., ์์ฌ์ ๋ณด }, ]} ์ด๋ฐ ํํ๋ก ๋ฆฌํดํ ์ ์๋๊ฐ ์ ๋๋ค.
- Likes
- 0
- Comments
- 4
- Viewcount
- 566
Q&A
์ฐ๊ด๊ด๊ณ ๋งคํ ์ด๋ค์์ผ๋ก ํด์ผ๋ ์ง ๊ฐ์ด ์์กํ๋๋ค.
์ง๋ฌธ์ด ์ ๋ฆฌ๊ฐ ์๋๊ณ ํก์ค์์ค ํ๊ฒ๊ฐ์ ๋ค์ ์ ๋ฆฌํด์ ์ง๋ฌธ๋๋ฆฝ๋๋ค ใ ใ @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "DTYPE") public abstract class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; } @Entity @DiscriminatorValue("B") public class Book extends Item { private String author; private String isbn; } @Entity @DiscriminatorValue("A") public class Album extends Item { private String artist; } @Entity @DiscriminatorValue("M") public class Movie extends Item { private String director; private String actor; } ์์ ์ฐ๊ด๊ด๊ณ์์ ๊ฐ์ฅ ๋ง์ ์์๋ก ์ฌ์ฉ๋๋ Item ๊ณผ Movie, Album, Book ์์๋ก ์ง๋ฌธ๋๋ฆฝ๋๋ค ์์ ์์์์ ๊ฐ๊ฐ Book, Movie, Album์ Repository๊ฐ ๋ง๋ค์ด์ง๊ณ @Repositorypublic interface ItemRepositoryT extends Item> extends JpaRepositoryT, String> {} ItemRepository๋ ์์ ๊ฐ์ด ๊ตฌํ ๋์๋ค๊ณ ๋ณผ๋ ์ด๋ฐ์์ผ๋ก ์ฌ์ฉ๋ ์๋ ์์ง๋ง List bookList = bookRepository.findAll(); List movieList = movieRepository.findAll(); List bookList = albumRepository.findAll(); ์๋์ ๊ฐ์ด Item์ผ๋ก ๋ฐ์์๋ ์๋๋ฐ, ๊ทธ๋ ์๋์ ๊ฐ์ด getClassํ๊ฑฐ๋ instansof๋ฅผ ํตํด ์ด๋ค ์์ํด๋์ค์ธ์ง ํ์ธ ๊ฐ๋ฅํ๊ณ ํ๋ณํ๋ ๊ฐ๋ฅํ๊ฒ์ ํ์ธํ์ต๋๋ค. List itemList = itemRepository.findAll(); for(Item item : itemList){ System.out.println(item.getClass().toString()); // Book, Album, Movie ํด๋์ค์์ ํ์ธ. } ์ง๋ฌธ: ๋ก์ง์ Book, Album, Movie๋ฅผ ์ง์ ์กฐํํ ์ผ์ ๊ฑฐ์ ์๊ณ Item ๋ง์ผ๋ก ์กฐํํด์ผ๋๋ ์ผ์ด ๋น๋ฒํ ๊ฒฝ์ฐ๋ ์ด๋ค์์ผ๋ก ๋ก์ง์ ์ง์ผํ ์ง๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์คํ ์ ์ฅ์์ ์กฐํ ์ ์ ๋ด๊ฐ ์กฐํํ ๊ฒ Book์ธ์ง Movie์ธ์ง ๋ชจ๋ฅด๋ ์ํฉ์ด๋ผ Item์ผ๋ก ์กฐํํด์ผ๋ง ํ๋ ์ํฉ์ด๊ณ ์กฐํ ํ์ ์๋ ์ฝ๋ ์ฒ๋ผ instanceof๋ฅผ ํตํด ํ๋ณํ ํด์ฃผ๋ฉด ๋๋ค ์น์ง๋ง // ๋จ์ผ ์กฐํ์ผ ๊ฒฝ์ฐ Item item = itemRepository.findById(id); Book book; if(item instanceof Book){ book = (Book) item; } ๋จ์ผ ์กฐํ๊ฐ ์๋ ์ ์ฒด ๋ฆฌ์คํธ ์กฐํ์ผ๊ฒฝ์ฐ๋ ์ด๋ค์์ผ๋ก ํด์ผํ๋์ง ๊ฐ์ด ์์กํ๋๋ค ใ ใ // ๋ฆฌ์คํธ ์กฐํํ ๊ฒฝ์ฐ ? List itemList = itemRepository.findAll(); for(Item item : itemList){ ??? } ๋ฆฌ์คํธ๋ก ์กฐํํ ๋ ORDER BY๋ ํ์ด์ง ๊น์ง ๊ณ ๋ ค๋์ ์ํธ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๊ฑฐ๋ผ ํฌ๋ฌธ ๋๋ฉด์ ํ๋ณํ ํ๊ณ ๊ฐ๊ฐ์ ๋ฆฌ์คํธ์ ๋ค์ ๋ด๊ธฐ๋ ์ด๋ ต๊ณ JPA๋ฅผ ์ด์ฉํด ์ ์ด์ ๋ฐ์์ฌ๋ ๊ฐ๊ฐ ๋ง๋ ํด๋์ค์ ๋ง๊ฒ ๋ฐ์์์ ํ๋์ ๋ฆฌ์คํธ์ ๋ด๋ ๋ฐฉ๋ฒ์ด ์๋์?bookList, movieList๊ฐ ์๋ ItemList ํ๋๋ง ์กด์ฌํด์ผ ํ ๊ฒฝ์ฐ ์ด๋ค์์ผ๋ก ํด์ผํ๋์? List itemList ; ================= ์์ ์๋ฅผ ์ ์ํฉ์ ๋ง๊ฒ ๋ณ๊ฒฝํ์๋ฉด Item = ์ฌ์ฉ์ (๊ณ์ ์ ๋ณด) Book = ์๋ฐฉ์ฌ์ฉ์ (์๋ฐฉ๊ด๋ จ ์ ๋ณด ํฌํจ) Movie = ์์ฌ์ฌ์ฉ์ (์์ฌ๊ด๋ จ ์ ๋ณด ํฌํจ) Album = ๊ธฐํ ์ฌ์ฉ์ (๊ทธ์ธ ํ์ ์ ๋ณด ํฌํจ) ๋ก ๋์๊ฐ ์๊ฒ ์ฃ . ๊ทธ๋ฐ๋ฐ ์์คํ ๋ก์ง์ ์๋ฐฉ์ฌ์ฉ์๋ง ์กฐํํ๋ค๋๊ฐ ์์ฌ์ฌ์ฉ์๋ง ์กฐํํ๋ค๋๊ฐ ํ๋ ๊ธฐ๋ฅ๋ ์์์ ์์ง๋ง ์ ์ฒด์ฌ์ฉ์๋ฅผ ๊ณ์ ์ ๋ณด ๊ด๋ จ ์ํธ๋ก ๋ถ๋ฌ์จ๋ค ( Item ๋ฆฌ์คํธ๋ฅผ Item์ ํด๋นํ๋ ์ํธ๋ก ๋ถ๋ฌ์จ๋ค) ์๋ฐฉ์ฌ์ฉ์1, ์๋ฐฉ์ฌ์ฉ์2, ์์ฌ์ฌ์ฉ์1, ์๋ฐฉ์ฌ์ฉ์3, ์์ฌ์ฌ์ฉ์2 . ... ์ด๋ฐ์์ผ๋ก ๋ถ๋ฌ์์ผ ๋๊ธฐ๋๋ฌธ์ List ๋ก ๋ถ๋ฌ์์ผ ๋๊ธฐ๋ํ๊ณ ๋ก๊ทธ์ธ, ๊ณ์ ์ ๋ณด์์ ๊ณผ ๊ฐ์ ๊ณตํต๋ '์ฌ์ฉ์' ๊ด๋ จ ๊ธฐ๋ฅ๋ค ๊ตฌํ์์๋ ์ถ์ํด๋์ค๋ก ์ ์๋์์ง๋ง '์ฌ์ฉ์' ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์ ๊ทผํด์ผ ๋๋ ์ํฉ์ด๋ผ๊ณ ์ฌ๋ฃ๋ฉ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์์๊ด๊ณ๊ฐ ๋ง๋๊ฑด์ง ์๋๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ๋๋๊ฑด์ง ์กฐ์ฐจ ํ๊ฐ๋ฆฝ๋๋คใ ใ
- Likes
- 0
- Comments
- 4
- Viewcount
- 566
Q&A
์ด๋ฐ์์ ์ฐ๊ด๊ด๊ณ๋ ๊ฐ๋ฅํ๊ฐ์?
์ํ๋ ๋จผ์ ๋ต๋ณ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค.^^ ์ง๋ฌธ์ด ์ ๋ฆฌ๊ฐ ์๋๊ณ ํก์ค์์ค ํ๊ฒ๊ฐ์ ๋ค์ ์ ๋ฆฌํด์ ์ง๋ฌธ๋๋ฆฝ๋๋ค ใ ใ @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "DTYPE") public abstract class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; } @Entity @DiscriminatorValue("B") public class Book extends Item { private String author; private String isbn; } @Entity @DiscriminatorValue("A") public class Album extends Item { private String artist; } @Entity @DiscriminatorValue("M") public class Movie extends Item { private String director; private String actor; } ์์ ์ฐ๊ด๊ด๊ณ์์ ๊ฐ์ฅ ๋ง์ ์์๋ก ์ฌ์ฉ๋๋ Item ๊ณผ Movie, Album, Book ์์๋ก ์ง๋ฌธ๋๋ฆฝ๋๋ค ์์ ์์์์ ๊ฐ๊ฐ Book, Movie, Album์ Repository๊ฐ ๋ง๋ค์ด์ง๊ณ @Repositorypublic interface ItemRepositoryT extends Item> extends JpaRepositoryT, String> {} ItemRepository๋ ์์ ๊ฐ์ด ๊ตฌํ ๋์๋ค๊ณ ๋ณผ๋ ์ด๋ฐ์์ผ๋ก ์ฌ์ฉ๋ ์๋ ์์ง๋ง List bookList = bookRepository.findAll(); List movieList = movieRepository.findAll(); List bookList = albumRepository.findAll(); ์๋์ ๊ฐ์ด Item์ผ๋ก ๋ฐ์์๋ ์๋๋ฐ, ๊ทธ๋ ์๋์ ๊ฐ์ด getClassํ๊ฑฐ๋ instansof๋ฅผ ํตํด ์ด๋ค ์์ํด๋์ค์ธ์ง ํ์ธ ๊ฐ๋ฅํ๊ณ ํ๋ณํ๋ ๊ฐ๋ฅํ๊ฒ์ ํ์ธํ์ต๋๋ค. List itemList = itemRepository.findAll(); for(Item item : itemList){ System.out.println(item.getClass().toString()); // Book, Album, Movie ํด๋์ค์์ ํ์ธ. } ์ง๋ฌธ: ๋ก์ง์ Book, Album, Movie๋ฅผ ์ง์ ์กฐํํ ์ผ์ ๊ฑฐ์ ์๊ณ Item ๋ง์ผ๋ก ์กฐํํด์ผ๋๋ ์ผ์ด ๋น๋ฒํ ๊ฒฝ์ฐ๋ ์ด๋ค์์ผ๋ก ๋ก์ง์ ์ง์ผํ ์ง๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์คํ ์ ์ฅ์์ ์กฐํ ์ ์ ๋ด๊ฐ ์กฐํํ ๊ฒ Book์ธ์ง Movie์ธ์ง ๋ชจ๋ฅด๋ ์ํฉ์ด๋ผ Item์ผ๋ก ์กฐํํด์ผ๋ง ํ๋ ์ํฉ์ด๊ณ ์กฐํ ํ์ ์๋ ์ฝ๋ ์ฒ๋ผ instanceof๋ฅผ ํตํด ํ๋ณํ ํด์ฃผ๋ฉด ๋๋ค ์น์ง๋ง // ๋จ์ผ ์กฐํ์ผ ๊ฒฝ์ฐ Item item = itemRepository.findById(id); Book book; if(item instanceof Book){ book = (Book) item; } ๋จ์ผ ์กฐํ๊ฐ ์๋ ์ ์ฒด ๋ฆฌ์คํธ ์กฐํ์ผ๊ฒฝ์ฐ๋ ์ด๋ค์์ผ๋ก ํด์ผํ๋์ง ๊ฐ์ด ์์กํ๋๋ค ใ ใ // ๋ฆฌ์คํธ ์กฐํํ ๊ฒฝ์ฐ ? List itemList = itemRepository.findAll(); for(Item item : itemList){ ??? } ๋ฆฌ์คํธ๋ก ์กฐํํ ๋ ORDER BY๋ ํ์ด์ง ๊น์ง ๊ณ ๋ ค๋์ ์ํธ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๊ฑฐ๋ผ ํฌ๋ฌธ ๋๋ฉด์ ํ๋ณํ ํ๊ณ ๊ฐ๊ฐ์ ๋ฆฌ์คํธ์ ๋ค์ ๋ด๊ธฐ๋ ์ด๋ ต๊ณ JPA๋ฅผ ์ด์ฉํด ์ ์ด์ ๋ฐ์์ฌ๋ ๊ฐ๊ฐ ๋ง๋ ํด๋์ค์ ๋ง๊ฒ ๋ฐ์์์ ํ๋์ ๋ฆฌ์คํธ์ ๋ด๋ ๋ฐฉ๋ฒ์ด ์๋์?bookList, movieList๊ฐ ์๋ ItemList ํ๋๋ง ์กด์ฌํด์ผ ํ ๊ฒฝ์ฐ ์ด๋ค์์ผ๋ก ํด์ผํ๋์? List itemList ; ================= ์์ ์๋ฅผ ์ ์ํฉ์ ๋ง๊ฒ ๋ณ๊ฒฝํ์๋ฉด Item = ์ฌ์ฉ์ (๊ณ์ ์ ๋ณด) Book = ์๋ฐฉ์ฌ์ฉ์ (์๋ฐฉ๊ด๋ จ ์ ๋ณด ํฌํจ) Movie = ์์ฌ์ฌ์ฉ์ (์์ฌ๊ด๋ จ ์ ๋ณด ํฌํจ) Album = ๊ธฐํ ์ฌ์ฉ์ (๊ทธ์ธ ํ์ ์ ๋ณด ํฌํจ) ๋ก ๋์๊ฐ ์๊ฒ ์ฃ . ๊ทธ๋ฐ๋ฐ ์์คํ ๋ก์ง์ ์๋ฐฉ์ฌ์ฉ์๋ง ์กฐํํ๋ค๋๊ฐ ์์ฌ์ฌ์ฉ์๋ง ์กฐํํ๋ค๋๊ฐ ํ๋ ๊ธฐ๋ฅ๋ ์์์ ์์ง๋ง ์ ์ฒด์ฌ์ฉ์๋ฅผ ๊ณ์ ์ ๋ณด ๊ด๋ จ ์ํธ๋ก ๋ถ๋ฌ์จ๋ค ( Item ๋ฆฌ์คํธ๋ฅผ Item์ ํด๋นํ๋ ์ํธ๋ก ๋ถ๋ฌ์จ๋ค) ์๋ฐฉ์ฌ์ฉ์1, ์๋ฐฉ์ฌ์ฉ์2, ์์ฌ์ฌ์ฉ์1, ์๋ฐฉ์ฌ์ฉ์3, ์์ฌ์ฌ์ฉ์2 . ... ์ด๋ฐ์์ผ๋ก ๋ถ๋ฌ์์ผ ๋๊ธฐ๋๋ฌธ์ List ๋ก ๋ถ๋ฌ์์ผ ๋๊ธฐ๋ํ๊ณ ๋ก๊ทธ์ธ, ๊ณ์ ์ ๋ณด์์ ๊ณผ ๊ฐ์ ๊ณตํต๋ '์ฌ์ฉ์' ๊ด๋ จ ๊ธฐ๋ฅ๋ค ๊ตฌํ์์๋ ์ถ์ํด๋์ค๋ก ์ ์๋์์ง๋ง '์ฌ์ฉ์' ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์ ๊ทผํด์ผ ๋๋ ์ํฉ์ด๋ผ๊ณ ์ฌ๋ฃ๋ฉ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์์๊ด๊ณ๊ฐ ๋ง๋๊ฑด์ง ์๋๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ๋๋๊ฑด์ง ์กฐ์ฐจ ํ๊ฐ๋ฆฝ๋๋คใ ใ
- Likes
- 0
- Comments
- 2
- Viewcount
- 400




