티스토리 뷰
1.아래의 용어에 대하여 설명하시오.
-DI
(Dependency Injection 의존성 주입)
객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.
-IOC
(Inversion of Control 제어의 역전)
메소드나 객체의 호출작업을 다이렉트로 직접하는 것이 아니라, 외부에서 가져와 사용하는 것을 말한다.
다이렉트로 객체를 생성해 줄 경우와 객체 호출 순서가 반대로 되기 때문에 제어의 역전이라고 부른다.
이 경우 쉽게 다양한 객체를 생성, 수정이 가능해진다.
자세한 내용은 아래 예시 참고!
-IOC 컨테이너
DI를 주입해 IOC들을 관리해 주는 프레임워크가 바로 IOC 컨테이너, 즉 Spring이다.
- [로드 존슨]
이 스프링을 만들 때 위의 세 가지 개념으로 만들었다고 했기 때문에 중요하고 반드시 알아야한다.
이 세 가지 개념은 스프링에서 생겨난 것은 아니고 원래 있던 유명한 개념이다.
(이 개념들은 현실에 있는걸 표현하기 위해서 추상화 시킨 것)
- 결국 스프링이란 부품을 생성하고 조립하는 라이브러리의 집합체라고 할 수 있다.
- 스프링 이전에는 EJB로 어렵게 작업을 했다.
참고
https://velog.io/@gillog/Spring-DIDependency-Injection
[Spring] DI, IoC 정리
DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로,객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.DI(의존성 주입)
velog.io
https://yhmane.tistory.com/127
[Spring] - 스프링 주요 특성 IoC와 DI 이해하기
들어가며 스프링 프레임워크란 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로 간단히 스프링(Spring)이라고도 합니다. 한국에서는 전자정부 프레임워크의 영향을 받아서인지 압도적
yhmane.tistory.com
IOC 수업 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
DI(의존성 주입)
객체 넣는 방법
1. 다이렉트로 new
2. getter. setter 함수 사용
다이렉트로 생성하지 않고 생성자나 setter 함수를 이용해서 어딘가에서 받아오는 것...(의존성 주입)
- 다른 객체애서 넣어준다...
-> 가장 좋은 방법!!
클래스 안의 데이터 멤버는 무조건 getter, setter를 사용해 주기.
class Person{
Heart heart = null; 이면 사람 죽어...
따라서 person클래서는 heart에 의존하고 있다..
이것이 의존성 주입
해당 클레스 안에 있는 데이터 멤버에 해당 클래스가 의존하고 있는 것이 의존성 주입!
Person(Heart heart){
this.heart = heart;
}
void setHeart(Heart heart) {
this.heart = heart;
}
}
IOC(inversion of control - 제어의 역전)
- 객체 호출 순서
class Computer{
Cpu cpu; - cpu에 의존
1. 다이렉트
Cpu cpu = new Cpu();
2. 생성자
Computer(Cpu cpu){
this.cpu = cpu;
}
}
class Cpu{
Chip chip; - cpu는 내부적으로 회로(칩)이 있어야 된다.(chip에 의존)
1. 다이렉트
Chip chip = new chip();
2. 생성자
Cpu(Chip chip){
this.chip = chip;
}
}
public class MainClass {
public static void main(String[] args) {
1.
Computer com = new Computer();
다이렉트로 new 했을 경우 객체 호출 순서
Computer -> Cpu -> Chip
2.
Chip chip = new Chip();
Cpu cpu = new Cpu(chip);
가 먼저 생성이 되어 있어야
Computer 객체를 생성할 수 있다..
Computer com = new Computer(cpu);
생성자의 경우 객체 호출 순서
Chip -> Cpu -> Computer
1번과 다르게 거꾸로이다..그래서 제어의 역전이라고 부른다.(IOC)
}
==> 결국 왜 다이렉트로 넣는 것보다 IOC가 좋은 이유는?
다이렉트로 넣게 되면 처음부터 데이터형이 결정돼서 완성되어 버린다...
이 후에 변경하는 것이 불가..완성품...새로 객체를 또 생성해야한다.
getter, setter, 생성자를 이용할 경우 원하는 데이터 형으로 만들 수 있다..(폴리몰티즘?)
조립품....부품(넣는 값)을 원하는대로 변경 가능...(getter, setter)
이 IOC를 관리하는 컨테이너가 Spring !
}
|
cs |
spring을 사용하려면 우선
pom.xml에서 아래에 해당하는 spring 코드 부분이 있어야한다. (spring 해당 코드 부분이 보이는 곳 까지만 발췌)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.samples</groupId>
<artifactId>spring_2_2_ex1_springex</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<!-- Generic properties -->
<java.version>1.6</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Spring -->
<spring-framework.version>3.2.3.RELEASE</spring-framework.version>
<!-- Hibernate / JPA -->
<hibernate.version>4.2.1.Final</hibernate.version>
<!-- Logging -->
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.5</slf4j.version>
<!-- Test -->
<junit.version>4.11</junit.version>
</properties>
<dependencies>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
|
cs |
그리고 Maven Dependencies 폴더 안에 spring .jar파일들이 있어야한다.
2..삼각형및 사각형의 넓이를 구하는 프로그래밍을 IoC 컨테이너를 이용하여 프로그래밍 하시오.
- 삼각형과 사각형 Class 만들기
Triangle.class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package edu.kosmo.ex.shape;
public class Triangle {
private int width;
private int height;
public Triangle() {
}
public Triangle(int width, int height) {
this.width = width;
this.height = height;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public double TriangleArea() {
return (width * height) / 2;
}
}
|
cs |
Rectangle.class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package edu.kosmo.ex.shape;
public class Rectangle {
private int width;
private int height;
public Rectangle() {
}
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int RecArea() {
return width * height;
}
}
|
cs |
- appCTX.xml 에서 사각형과 삼각형 객체 생성및 가로세로 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Triangle 객체 -->
<!-- new로 객체 생성해주는 부분-->
<bean id="triangle" class="edu.kosmo.ex.shape.Triangle">
<!--setter함수를 이용해 값 -->
<property name="width" value="20"/>
<property name="height" value="30"/>
</bean>
<!-- Rectangle 객체 -->
<bean id="rectangle" class="edu.kosmo.ex.shape.Rectangle">
<property name="width" value="20"/>
<property name="height" value="30"/>
</bean>
</beans>
|
cs |
- main 클래스에서 Ioc 컨테이너 생성후 삼각형 사각형 객체를 받아 온후, 넓이 함수 호출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package edu.kosmo.ex.shape;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
String config = "classpath:appCTX.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(config);
// 이게 스프링...IOC 컨테이너
// 객체를 .xml로 이렇게 관리한다.
// 어딘가에서 new한 객체를 가져와야한다...
// 그 역할을 하는 것이 getBean("triangle", Triangle.class)
// Triangle.class에 해당되는 곳 찾아가서 확인하고 가져옴
Triangle triangle = ctx.getBean("triangle", Triangle.class);
System.out.println("삼각형 넓이: " + triangle.TriangleArea());
Rectangle rectangle = ctx.getBean("rectangle", Rectangle.class);
System.out.println("사각형 넓이: " + rectangle.RecArea());
}
}
|
cs |
3.아래의 SQL를 푸시오
--35> 관리자 번호 및 해당 관리자에 속한 사원들의 최저 급여를 출력하라.
단, 관리자가 없는 사원 및 최저 급여가 1000 미만인 그룹은 제외시키고 급여를 기준으로
출력 결과를 내림차순으로 정렬하라.
--36> 부서별로 부서이름, 부서위치, 사원 수 및 평균 급여를 출력하라.
그리고 각각의 컬럼명을 부서명,위치,사원의 수,평균급여로 표시하라.
--37> Smith와 동일한 부서에 속한 모든 사원의 이름 및 입사일을 출력하라.
단, Smith는 제외하고 출력하시오
--38> 자신의 급여가 평균 급여보다 많은 모든 사원의 사원 번호, 이름, 급여를
표시하는 질의를 작성하고 급여를 기준으로 결과를 내림차순으로 정렬하라.
--39> 이름에 T가 들어가는 사원의 속한 부서에서 근무하는 모든 사원의
사원번호 및 이름을 출력하라.
--40> 부서위치가 Dallas인 모든 사원의 이름,부서번호 및 직위를 출력하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
-- 35> 관리자 번호 및 해당 관리자에 속한 사원들의 최저 급여를 출력하라.
-- 단, 관리자가 없는 사원 및 최저 급여가 1000 미만인 그룹은 제외시키고 급여를 기준으로
-- 출력 결과를 내림차순으로 정렬하라.
SELECT mgr, MIN(sal) FROM emp GROUP BY mgr
HAVING MIN(sal) > 1000 and mgr IS NOT NULL ORDER BY MIN(sal) DESC;
-- 36> 부서별로 부서이름, 부서위치, 사원 수 및 평균 급여를 출력하라.
-- 그리고 각각의 컬럼명을 부서명,위치,사원의 수,평균급여로 표시하라.
SELECT d.dname AS "부서명", d.loc AS "위치", COUNT(e.empno) AS "사원의 수", AVG(e.sal) AS "평균급여"
FROM emp e, dept d WHERE e.deptno=d.deptno GROUP BY d.deptno, d.dname, d.loc;
-- 37> Smith와 동일한 부서에 속한 모든 사원의 이름 및 입사일을 출력하라.
-- 단, Smith는 제외하고 출력하시오
SELECT ename, hiredate FROM emp
WHERE deptno=(SELECT deptno FROM emp WHERE ename='SMITH')
AND ename != 'SMITH';
-- 38> 자신의 급여가 평균 급여보다 많은 모든 사원의 사원 번호, 이름, 급여를
-- 표시하는 질의를 작성하고 급여를 기준으로 결과를 내림차순으로 정렬하라.
SELECT empno, ename, sal FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp)
ORDER BY sal DESC;
-- 39> 이름에 T가 들어가는 사원의 속한 부서에서 근무하는 모든 사원의
-- 사원번호 및 이름을 출력하라.
SELECT empno, ename FROM emp WHERE deptno IN(SELECT deptno FROM emp WHERE ename LIKE '%T%');
--40> 부서위치가 Dallas인 모든 사원의 이름,부서번호 및 직위를 출력하라.
SELECT ename, job FROM emp, dept
WHERE emp.deptno=dept.deptno AND dept.loc='DALLAS';
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-- Smith보다 늦게 입사한 사원의 이름 및 입사일을 출력하라.
SELECT ename, hiredate FROM emp WHERE hiredate >
(SELECT hiredate FROM emp WHERE ename='SMITH');
-- 자신의 관리자보다 먼저 입사한 모든 사원의 이름, 입사일,
-- 관리자의 이름, 관리자의 입사일을 출력하되 각각 컬럼명을
-- Employee,EmpHiredate, Manager,MgrHiredate로 표시하여 출력하라.
SELECT e.ename as "Employee", e.hiredate as "EmpHiaredate", m.ename as "Manager", m.hiredate AS "MgrHiredate"
FROM emp e, emp m WHERE e.mgr = m.empno AND e.hiredate < m.hiredate;
-- 모든 사원의 급여 최고액,최저액,총액 및 평균액을 출력하되
-- 각 컬럼명을 Maximum, Minimum, Sum, Average로 지정하여 출력하라.
SELECT MAX(sal) "Maximum", MIN(sal) "Minimun" , SUM(sal) "Sum", AVG(sal) "Average" FROM emp;
-- 각 직업별로 급여 최저액.최고액,총액 및 평균액을 출력하라.
SELECT job, MAX(sal), MIN(sal) , SUM(sal), AVG(sal) FROM emp GROUP BY job;
-- ~별 나오면 group by 사용하기
-- 직업이 동일한 사람 수를 직업과 같이 출력하라.
SELECT COUNT(job), job FROM emp GROUP BY job;
|
cs |
개별진척도
52번)
아래와 같이 출력이 나오도록 프로그래밍을 하시오.
HashSet<Num> set = new HashSet<>();
set.add(new Num(7799));
set.add(new Num(9955));
set.add(new Num(7799));
System.out.println("인스턴스 수: " + set.size());
for(Num n : set)
System.out.print(n.toString() + '\t');
System.out.println();
/*
====출력
인스턴스 수: 2
7799 9955
*/
53번
HashMap<Integer, String> map = new HashMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
위의 Value 값이 다나오도록 for 문 돌리시오.
'수업문제' 카테고리의 다른 글
[문제] 12월 14일 (자바 스크립트, Number 함수, String 함수, 데이터 타입) (0) | 2021.12.14 |
---|---|
[문제] 12월 13일 (Spring 입문, javascript 데이터 타입, 변수 선언) (0) | 2021.12.13 |
[문제] 12월 09일 (게시판 템플릿 적용하기) (0) | 2021.12.09 |
[문제] 12월 08일 (Foreign key, 게시판 쿼리문, 설계도 to do list) (0) | 2021.12.08 |
- Total
- Today
- Yesterday
- 참조형
- SOCKET
- el
- 세션
- hashset
- compareTo
- equals
- 쿠키
- 프로토콜
- 진척도 70번
- Request
- 입출력
- response
- string
- 사칙연산 계산기
- 쓰레드
- 래퍼 클래스
- Generic
- 채팅
- object
- Session
- toString
- 예외처리
- 제네릭
- 부트스트랩
- JSP
- abstract
- exception
- Servlet
- TreeSet
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |