728x90
반응형

📗 늑대와 향신료 소개

시즌 2개

 

미완결 느낌의 애니

 

경제물, 로맨스

 

★★

(주관적인 별점 기준)

더보기

***별점 매우 짜게 줍니다***

***2점 이상은 다 볼만합니다***

 

0점 : 개 쓰레기 애니

1점 : 시작은 했으니 억지로 본 애니

2점 : 딴짓하면서 틀고 볼만한 애니

3점 : 나름 재밌었던 애니

4점 : 지인들에게 강력 추천할만큼 재밌는 애니

5점 : 세상에 알려야 할 애니

 

늑대와 향신료는 시즌이 2개로 구성되어있는 경제물 속에서 피어나는 로맨스를 담은 애니입니다.

 

주인공 로렌스는 늑대의 화신인 '호로'를 자신의 마차에서 발견하게 되고, 어쩌다보니 같이 다니게 됩니다.

 

로렌스는 물건을 되파는 상인이기 때문에 여러 마을을 다니며 장사를 합니다. 상인들의 거래에는 거짓, 사기, 물가, 정치 등 따져야 할 요소가 매우 많습니다. 호로는 화신인 만큼 오래 살아오며 여러 장사꾼들을 만났습니다. 그렇기에 로렌스가 거래중 정보 부족으로 혼란스러워할때 마다, 팁을 주거나 큰 이득을 보도록 감초를 치곤 합니다. 그 덕분에 로렌스도 군말없이 호로를 데리고 여행을 다닙니다.

 

 

 

 

 

 

📖 후기

저는 속았습니다. 늑대와 향신료가 설렌다는 말도 많이 들었고, 많은 애니 소개와 표지를 이미지를 봤을때 로맨스 80% 경제물 20%정도의 애니인줄 알았습니다. 실제로는 경제물 80%, 로맨스 20%정도입니다. 그런데도 제가 애니를 전부 볼 수 있었던 이유는.. 호로의 미모와 로렌스의 목소리 때문입니다.

 

 

정말 너무 이쁩니다. 솔직히 작화가 좋은편은 아닙니다. 그래도 호로를 그릴때 만큼은 정성들여서 그렸다고 생각합니다. 호로가 아니였으면 이 애니 끝까지 못봤습니다.

 

일단 호로의 성격 자체가 너무 사랑스럽습니다. 자신감 넘치는 모습으로 많은 일들을 해쳐나가는것을 보면 기대고 싶어지기도 하고, 우울해하거나 힘들어하는 모습을 보면 지켜주고 싶은 느낌이 듭니다.

 

로렌스와의 케미도 빠질 수 없습니다. 늑대와 향신료는 썸타는 간질거리는 느낌보다는 부부관계의 신뢰와 믿음, 안정감 등의 분위기를 더 많이 냅니다. 그래서 그런지 연애관련으로 열불나고 속터지는 장면은 많이 나오지 않아서 좋았습니다. 2기에서 이런 부분이 조금은 존재하는데, 호로의 성격을 잘 파악하셨다면 재밌게 볼 수 있을겁니다.

 

 

 

 

 

주인공 로렌스도 제가 이 애니를 끝까지 보게 만든 원인 중 하나입니다. 솔직히 말해서 중년 그 이상의 아저씨 기운을 내뿜고있는 로렌스의 외형은 그닥 취향이 아니였습니다.

 

외형은 매우 아쉽지만 늑대와 향신료에서 이런 고급 성우분을 데려올 줄 몰랐습니다. 무려 "후쿠야마 쥰" 입니다. 코드기어스 - 를르슈, 암살교실 - 살선생, 흑집사 - 그렐, 중2코이 - 토가시 유타 등 매우 유명한 작품들의 주연으로도 나오고 특이한 캐릭터도 잘 소화하는 성우입니다. 제가 가장 좋아하는 성우이기도 합니다.

 

호로 덕분에 눈이 즐겁고 로렌스 덕분에 귀가 즐거운 애니였습니다.

 

 

 

 

결말은 조금 아쉬웠습니다. 3기가 나올지 모르겠는데 2기 마무리 자체도 대충 마무리 지은 느낌이 있습니다. 1기 마무리도 솔직히 시원하지 않았는데, 2기 마무리도 비슷한 느낌으로 끝나서 많이 아쉽습니다. 항상 드는 생각이지만 모든 작품은 마무리가 참 중요하다고 생각합니다.

 

728x90
반응형
728x90
반응형

📗 마법소녀 마도카 마기카 소개

시즌 1개

 

15세 이상을 꼭 지키길 바람

 

치유물, 마법소녀, 학원물

 

★★★★☆

(주관적인 별점 기준)

더보기

***별점 매우 짜게 줍니다***

***2점 이상은 다 볼만합니다***

 

0점 : 개 쓰레기 애니

1점 : 시작은 했으니 억지로 본 애니

2점 : 딴짓하면서 틀고 볼만한 애니

3점 : 나름 재밌었던 애니

4점 : 지인들에게 강력 추천할만큼 재밌는 애니

5점 : 세상에 알려야 할 애니

 

 

마법소녀 마도카 마기카는 일명 '마마마'라고 불리는 마법소녀물입니다.

마기카는 '마법의'를 뜻하는 형용사의 여성버전이라고 합니다.

 

이 세상에는 세상을 어지럽히는 마녀라는 존재가 있습니다.

 

귀여운 '큐베'라는 생명체는 마녀를 처치하기 위해 마법소녀들을 모으고 있습니다.

 

소원 하나를 들어주는 대신 마법소녀가 되어 마녀들을 무찔러달라고 하죠.

 

소원은 그 어떤 소원이든 가능합니다만, 소원의 크기만큼 그들이 치뤄야 할 대가도 만만치 않을겁니다.

 

 

 

 

 

📖 후기

10년전 후기라면 몰라도 '마마마'에 대해 모르는 사람은 이 후기도 검색하지 않았을거라고 생각합니다.

 

'마법소녀 마도카 마기카'는 치유물입니다. 치명적인 유해물이죠.

 

 

마마마 오프닝의 장면입니다. 전형적인 어린아이들이 볼만한 마법소녀물과 다르지 않아보입니다.

 

누가봐도 핑크색이 주인공이고 파란색은 시원털털한 느낌의 감초, 노란색은 미모와 여성스러움을 담당하는 캐릭터처럼 보이죠. 캐릭터들의 성격이 이런 일반적인 설정에서 전혀 벗어나지 않습니다.

 

그렇기 때문에 많은 시청자들이 마마마를 생각없이 보다가 충격받았던거겠죠.

 

 

 

 

 

저는 여태 꽤 많은 애니를 봤지만 이렇게 무서운 분위기의 애니는 처음입니다. 내용을 모르고 보면 별로 잔인하지도 않고 감흥도 없을거라고 생각합니다만, 저는 이러한 장면들에서 소름이 끼쳤습니다. (솔직히 첫번째 사진은 좀 무섭네요)

 

마마마는 귀엽고 평온한 느낌의 그림체로 시청자들의 긴장을 푸는 동시에 기괴하고 위화감이 돋는 연출을 사용합니다. 멍때리면서 보다가도 갑자기 급변하는 스토리와 분위기에 충격을 받게 만듭니다. 소위 말하는 동심파괴를 서슴지 않고 시전합니다.

 

연출도 연출이지만 저는 스토리에도 많은 감탄을 했습니다. 지금 나오는 양산형 애니들의 위화감드는 자극적인 요소들과 아침 드라마급 스토리 전개는 마마마의 영향을 받았다고 해도 과언이 아닐 정도입니다. 실제로도 마마마 이후에 많은 마법소녀물들이 자극적으로 변했다고 합니다.

 

 

 

 

 

 

이 모든 일들의 원인은 '큐베'라는 생명체 덕분에 시작됐습니다. 저는 마마마의 스토리를 전혀 모르고 큐베라는 녀석이 나쁜 녀석이라는 것만 알고 시청했습니다. 이녀석에 대한 이야기는 많은 스포가 됩니다.

 

애니를 다 보고나서 큐베가 딱히 나쁘지 않다고 생각했습니다. 그런데 큐베가 한 짓들을 되돌아보니 개쓰레기라고 생각합니다. 일단 주변에서 알짱거리며 가스라이팅을 시전하는 것만 봐도 매우 열받습니다.

 

처음에는 순수악이라고 생각했는데, 이정도면 본인도 나쁜짓 하는걸 알고있는것 같습니다.

 

 

 

 

참 재미있게 본 애니지만 결말이 조금 아쉽습니다. 이 애니에서는 어떤일이 일어나도 이상하지 않을정도지만, 결말은 산을 넘어 우주까지 가버렸습니다. 이런 '코드기어스' 방식의 엔딩을 좋아하긴 하지만, 스토리가 너무 멀리까지 가버린게 아닌가 싶은 결말이였습니다.

 

조금 더 행복하거나 정상적이거나, 완전 비극적인 엔딩으로 끝났다면 5점을 줬을지도 모르겠습니다. 어떤 작품이든 마무리가 참 중요하다는 생각이 한 번 더 들었습니다.

 

그래도 개인적으로 이정도면 아주 재밌게 봤고 결말이 조금 아쉽긴 하지만 마마마를 시청하는 것은 절대 후회하지 않을 선택이라고 확신합니다. 적어도 '큐베'라는 밈의 의미를 얻어갈 수 있습니다.

 

728x90
반응형
728x90
반응형

📗 스즈미야 하루히의 우울 소개

시즌 2개 (사실상 1개)

 

서비스신이 많고 스토리가 난해한 편

 

판타지, 타임루프, 코믹, 하렘, 로맨스(?)

 

★★★☆☆

(주관적인 별점 기준)

더보기

***별점 매우 짜게 줍니다***

***2점 이상은 다 볼만합니다***

 

0점 : 개 쓰레기 애니

1점 : 시작은 했으니 억지로 본 애니

2점 : 딴짓하면서 틀고 볼만한 애니

3점 : 나름 재밌었던 애니

4점 : 지인들에게 강력 추천할만큼 재밌는 애니

5점 : 세상에 알려야 할 애니

 

 

넷플릭스에 스즈미야 하루히를 검색해보면 스즈미야 하루히의 우울 2가지, 스즈미야 하루히의 소실을 볼 수 있습니다.

 

스즈미야 하루히의 우울 2가지가 1기와 2기로 나뉘는데, 저는 모두 봤습니다.

 

솔직히 말해서 1기는 스토리가 매우 뒤죽박죽 섞여있습니다. 시간 순서대로 보는 방법을 검색해서 봐야할 정도입니다. 시작부터(1기 1화) 바니걸 코스프레를 한 여자가 나와서 시장을 돌아다니고 메이드복을 입고 전투를 하고 초능력을 가진 남자주인공과 사랑에 빠지는 느낌으로 나오면서,  20분동안 나레이션이 계속해서 나옵니다. 저는 이게 도대체 뭐하는 애니인지 알 수 없었습니다.

 

사실 이 장면이 부원들끼리 찍은 영화 장면입니다. 이것도 1화 끝나자마자 나오는 내용이라 아셔도 문제 없습니다.. 저는 이 부원들이 누구인지도 모르고 갑자기 축제를 하고있고, 다음 화에서는 주인공과의 첫 만남이 시작되는데 또 그 다음에는 갑자기 모르는 캐릭터들이 부원으로 자리를 잡고있고, 스토리 순서가 답이 없습니다.

 

검색해서 순서대로 보는 것도 괜찮은 방법이지만 저는 1기를 스킵하고 2기부터 보는 것을 추천드립니다.

 

분명 1기를 보지 않아도 괜찮은가..? 라는 생각을 하시겠죠... 네 안봐도 됩니다. 그냥 안봐도 이해가 가능하다 -- 라는 말이 아니라 1기 내용이 2기에 완전히 동일하게 포함되어있기 때문에 보지 않으셔도 됩니다. 그나마 2기는 스토리 진행 순서대로 나열되어있어서 1기를 안보고 2기를 보는것이 좋다고 생각합니다.

 

저는 1기를 다 보고 2기를 틀었는데 동일한 내용이 진행되길래 2화, 3화 ... 7화를 모두 넘기고 8화에 도착한 순간 처음보는 내용의 회차가 나왔습니다. 정말 충격적이였습니다. 심지어 8화가 끝나고 9화부터 다시 1기의 내용이 나오기 시작했습니다. 그렇게 9화, 10화, 11화까지 1기의 내용이 나왔습니다. 이후에는 그나마 스즈미야 하루히의 우울의 중심인 타임루프가 나오기 시작했는데, 계속 반복되는 타임루프물이 8회차나 지속되었습니다. 그 이후에는 1기 1화에서 나오던 영화를 찍는것에 대한 내용과 1기 내용이 또 동일하게 나옵니다.

 

결론 : 2기만 보세요

 

 

 

 

 

 

📖 후기

'스즈미야 하루히의 우울 소개' 라고 적어두고 여러가지 하소연을 작성한듯 합니다.

그래도 재밌었으니까 저 어이없는 상황에서도 정주행한게 아닌가 싶습니다.

 

 

캐릭터들의 외형, 성격, 컨셉 모두 남다르고 재밌었습니다. 제 입장으로는 하루히를 제외한 히로인들이 모두 취향이여서 참 즐거웠습니다. 하루히는 외형도 제 취향이 아니지만, 인성문제로 제 마음속에서 탈락시켰습니다.

 

특히 안경소녀와 갈색머리 언니중 누가 원픽인지에 대해 많은 고민이 있었지만 결국 안경소녀를 선택했습니다. 외형만 보면 절대로 선택할 수 없는데 말이죠.. 실제로도 스즈미야 하루히 캐릭터 인기투표중 1위가 저 안경소녀입니다. 자세한건 애니를 보면 아실수 있습니다만, 정말 매력적인 캐릭터입니다 ^^

 

갈색머리 언니는 '스즈미야 하루히의 우울'에서 서비스씬을 담당하고 있습니다. 네 그렇습니다 : )

 

 

 

 

 

이 두 장면은 하루히의 인성을 제대로 볼 수 있는 장면입니다. 왼쪽 장면을 보면서도 어이가 없겠지만, 오른쪽 장면은 정말 선을 넘었습니다. 츤데레 캐릭터라 뭔가 안쓰럽고 미운정도 있긴 하지만, 제 머릿속의 '스즈미야 하루히'는 큐베보다도 더 한 놈이라고 생각합니다.

 

 

그래도 전체적인 애니 스토리는 매우 참신하고 여러가지 에피소드들도 나오면서 가끔 혈압도 많이 오르지만 시간가는줄 모르고 봤습니다. 심지어 반복되는 타임루프 8회차를 아무생각없이 본걸 보면.. 그래도 볼만했던거 아닐까요? 여러분들은 8회차 전부 보지말고 시간 아끼세요.

 

 

하고싶은 말은 많은데 더 말하면 스포가 될 것 같네요. 아무튼 1기는 절대 안보셨으면 하고, 2기부터 보시는데.. 타임루프 부분은 어느정도 건너뛰어도 괜찮다고 말씀드리고 싶었습니다!

 

728x90
반응형
728x90
반응형

🎃 에러

public static void main(String[] args) {
		int num = 100/0;
	}

자바에는 '100/0'과 같은 무한대 값을 표현할만한 자료형이 없다.

 

이 코드를 실행하면 빨간줄은 없지만, 무한대 값에 대한 오류가 난다.

 

 

개발 중 Console에서 이러한 예외 문구를 본 적이 있을것이다.

 

해당 사진에서는 int num = 100/0; 부분에서 ArthmeticException이라는 예외가 발생했다고 한다.

 

실행 전에는 빨간줄이 없었는데 이런 문구가 나온다면, 에러 중에서도 예외처리가 가능한 에러인 것이다.

 

 

 

 

 

💊 예외 처리

public static void main(String[] args) {
		try {
			int num = 100/0;
		} catch(ArithmeticException e) {
			e.printStackTrace();
			System.out.println("0으로 나누면 예외가 발생합니다. 프로그램을 종료하겠습니다.");
			
			return; // 메인메서드를 강제종료
		} finally {
			System.out.println("저는 항상 실행됩니다.");
		}
		
	}

try / catch / finally 를 사용하여 예외 처리를 진행한다.

 

try : 예외 처리를 할 코드 (문제가 생길만한 코드)

catch : 예외 처리 (오류가 난 경우 실행될 코드)

finally : 예외처리 여부에 상관없이 무조건 실행되는 코드

 

catch(예외 e)를 적어주면 그 예외에 대한 검사를 하는데, catch(Exception e)로 작성해도 무방하다.

모든 예외들은 Exception을 상속받고 있기 때문에 부모인 Exception을 사용하면 모든 예외가 처리된다. (다형성)

다만 여러 종류의 예외를 각각 다르게 처리하려면 예외를 정확하게 적는 것을 추천한다.

 

e.printStackTrace();를 통해 예외 발생시 Console에 뜨는 문구를 확인할 수 있다.

 

 

 

예외처리가 정상적으로 되었고, 예외 문구도 같이 출력되었다.

 

catch에서 메인메서드를 종료하는 return도 존재했지만, finally는 무조건 실행된다.

728x90
반응형
728x90
반응형

💾 설치 : Maven Repository: com.jfinal » cos » 2020.4 (mvnrepository.com)

* \웹프로젝트\WebContent\WEB-INF\lib 위치에 설치한 jar 파일을 넣기 *

 

 

 

📂 파일 업로드

강철의 연금술사 사진을 성공적으로 추가한 모습

 

form.jsp

<body>
	<form id="Action" action="<%=request.getContextPath()%>/action.jsp" method="post" enctype="multipart/form-data">
		<div class="form-group">
	        사진 : 
	        <input type="file" name="image">
	    </div>
	    
	    <button id="btn" type="buttion" onclick="clickBtn()">추가</button>
	</form>
	<script>
		function clickBtn() {
			$('#Action').submit();	
		}
	</script>
</body>

 

<form enctype="multipart/form-data">의 형태로 생성한다.

 

<input type="file" name="image">와 같이 type을 file로 지정한다.

 

버튼을 클릭하면 action.jsp로 이동한다. (action.jsp에서 사진 업로드 처리)

 

 

 

 

 

action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %> <!-- request 대신 -->
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %> <!-- 파일이름 중복을 피할 수 있도록 -->

<%
	// 웹 프로젝트 위치에 넣어도 된다 (이클립스에서 사진 추가되는 것을 실시간으로 확인 가능)
	// MultipartRequest mr = new MultipartRequest(request, "C:/Users/fjdks/Desktop/erp/WebContent/image", 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
	MultipartRequest mr = new MultipartRequest(request, request.getRealPath("/image"), 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
	System.out.println("저장되는 경로(실제 서버) : "+request.getRealPath("/image"));
	
	String fileName = mr.getFilesystemName("image");
	System.out.println("사진 이름 : "+fileName);
%>

MultipartRequest를 통해 사진을 저장한다. (웹 프로젝트 위치 or 서버 위치)

 

request.getRealPath()로 실제 서버 위치에 접근할 수 있다.

(이클립스에서는 사진이 추가되는 것이 보이지 않는다. 웹 프로젝트 위치로 접근하면 사진이 추가되는 것을 실시간으로 확인할 수 있다)

 

form.jsp에서 enctype="multipart/form-data"으로 받아왔기 때문에, request.getParameter()를 사용할 수 없다.

 

파일명은 mr.getFilesystemName()을 사용하여 받고, 일반적인 값은 mr.getParameter()를 통해 받아온다.

 

 

 

 

* request.getRealPath("/image")가 작동되도록 WebContent 아래에 image 파일을 생성했다 *

 

 

 

 

 

 

 

 

📂 이전 파일 삭제

강연 사진이 사라지고 새로운 사진이 추가된 것을 볼 수 있다

 

 

action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %> <!-- request 대신 -->
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %> <!-- 파일이름 중복을 피할 수 있도록 -->
<%@ page import="java.io.File" %>

<%
	// 이렇게 원하는 위치를 직접 넣어도 되긴 함(프로젝트 파일에 실시간으로 추가되는거 볼 수 있음 ㅋㅋ)
	// MultipartRequest mr = new MultipartRequest(request, "C:/Users/fjdks/Desktop/erp/WebContent/image", 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
	MultipartRequest mr = new MultipartRequest(request, request.getRealPath("/image"), 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
	System.out.println("저장되는 경로(실제 서버) : "+request.getRealPath("/image"));
	
	String fileName = mr.getFilesystemName("image");
	System.out.println("저장된 사진 이름 : "+fileName);
	
	// 실제로는 이전 사진 이름을 DB에서 불러온다
	String beforeImg = "fullmetalAlchemist.PNG";
	
	// 이전 사진명을 통해 실제로 삭제될 사진을 가져온다
    	String deleteImgName = request.getRealPath("/image/") + beforeImg;
    	File deleteImg = new File (deleteImgName);
    
    	// 이전 사진이 경로에 존재한다면 삭제한다
    	if (deleteImg.exists() && deleteImg.isFile()){
    	    deleteImg.delete();// 사진 삭제
    	    System.out.println("삭제된 이전 사진 : "+beforeImg);
    }
	
%>

임시로 이전 사진의 이름을 "fullmetalAlchemist.PNG"로 설정하였지만 실제로는 DB에서 값을 받아와야 한다.

 

경로 + 사진 이름까지 담겨진 deleteImgName 변수를 File 형태로  만든다.

 

만약 deleteImg의 경로에 파일이 존재하고 deleteImg가 파일이라면, 해당 사진(이전 사진)을 삭제한다.

 

이전 사진이 삭제되었다.

 

728x90
반응형
728x90
반응형

📖 Map

	public static void main(String[] args) {
		Map<String, Object>map = new HashMap<>();
		map.put("name", "러아니푸");
		map.put("pet","순돌이");
		map.put("age",99);
		
		System.out.println(map.get("name")); // 키로 값을 출력
		System.out.println("");
		
		for(String k :map.keySet()) { // 키만 출력
			System.out.println(k);
		}
		System.out.println("");
		
		for(Object v : map.values()) { // 값만 출력
			System.out.println(v);
		}
	}

 

  • 키와 값으로 구성되어있다.
  • 여러 타입의 값을 저장하기에 좋다.
  • 키값은 중복이 허용되지 않지만, 값은 상관없다.
  • for문의 사용이 어렵고, foreach문을 통해 키와 값을 출력할 수 있다.

 

 

 

📖 table join 데이터 받아오는 방법

Emp.java : 사원 정보를 담는 Vo

public class Emp {
	private int empNo;
	private String empName;
	private int deptNo;
    
    // setter/getter, toStrint() 넣어야 합니다
}

 

 

Dept.java : 부서 정보를 담는 Vo

public class Dept {
	private int deptNo;
	private String deptName;
	private String deptLoc;
	
	// setter/getter, toStrint() 넣어야 합니다
}

 

   

    => 사원과 부서 테이블을 join했을 경우의 값을 받아온다.

 

 

 

 

 

😀 Vo 사용으로 처리

 

EmpAndDept.java : Emp와 Dept를 넣은 Vo

public class EmpAndDept {
	private Emp emp;
	private Dept dept;
    // setter/getter, toStrint() 넣어야 합니다
}

 

 

 

 

main.java

   public EmpAndDept selectEmpVoOne() {
      // 사원 정보
      Emp emp = new Emp();
      emp.setEmpNo(1);
      emp.setEmpName("러아니푸");
      emp.setDeptNo(100);
      
      // 부서 정보
      Dept dept = new Dept();
      dept.setDeptNo(100);
      dept.setDeptName("티스토리");
      dept.setDeptLoc("카카오");
      
      // 사원과 부서
      EmpAndDept end = new EmpAndDept();
      end.setEmp(emp);
      end.setDept(dept);
      
      return end;
   }
   
   public static void main(String[] args) {
   
      EmpDao empDao = new EmpDao();   
      EmpAndDept end = empDao.selectEmpVoOne();
      System.out.println(end);
   }

 

  *실제로는 selectEmpVoOne()은 EmpDao에 넣고 사용합니다*

 

  • 새로운 Vo에 join되는 테이블의 객체를 넣어 사용합니다.
  • 이 방식은 새로운 형식의 join을 할 때 마다, 그에 맞는 Vo를 만들어 줘야 하는 방식입니다.
  • 자주 join되는 테이블이면 몰라도 한 두번 사용하는 join을 위해 만드는 것은 비효율적입니다.

 

 

 

😀 Map 사용으로 처리

 

main.java

   public Map<String, Object> selectEmpMapOne() {
      Map<String, Object> map = new HashMap<>();
      Emp emp = new Emp();
      emp.setEmpNo(1);
      emp.setEmpName("러아니푸");
      emp.setDeptNo(100);
      
      Dept dept = new Dept();
      dept.setDeptNo(100);
      dept.setDeptName("티스토리");
      dept.setDeptLoc("카카오");
      
      map.put("emp", emp);
      map.put("dept", dept);
      
      return map;
   }
   
   public static void main(String[] args) {
   
      EmpDao empDao = new EmpDao();
      Map<String, Object> map = empDao.selectEmpMapOne();
      Emp emp = (Emp)map.get("emp");
      Dept dept = (Dept)map.get("dept");
      System.out.println(emp);
      System.out.println(dept);
   }

 

*실제로는 selectEmpVoOne()은 EmpDao에 넣고 사용합니다*

 

  • Emp와 Dept 각각을 Map에 넣어 사용합니다.
  • 새로운 Vo를 만들지 않아 편리하지만 받아서 사용할때는 형변환을 해야합니다.
  • 값을 받아올 필드의 개수가 적다면 굳이 Emp, Dept의 객체를 넘기지않고, 키값에 맞춰 값만 넘겨도 좋습니다.

 

728x90
반응형

+ Recent posts