게으른 완벽주의자의 개발자 도전기
spring boot 기초, Thymeleaf 기초 (each, status) 본문
IOC Inversion Of Control 제어의 역전
사용해야 하는 객체를 만들어서 코드 개발( 원래 개발자가 함)
그러나 스프링에서는 객체를 스프링 컨테이너가 만들어 준다
why? 클래스 간 결합도를 낮추기 위해서
DI(Depandency Injection) 의존성 주입
spring에서는 자동으로 객체 만들어주기 위해서는
해당 패키지 안에 있어야 가능하다.
만약 패키지명 잘못 작성하면 프로젝트 지우고 다시 만드는것이 낫다.
기존 jsp controller에서는
MemberController(*.me) 로 실행한다고 한다면
spring에서는
MemberController("/member") 실행시킨다.
http://localhost:8081/member/join 으로 실행된다.
<스프링은 객체를 직접 생성하지 않고, 스프링이 자체적으로 객체를 생성하도록 작성한다>
1. 스프링이 프로젝트 시작과 동시에 필요한 객체를 먼저 생성할 수 있도록 설정
1) 객체를 생성하고자 하는 클래스는 반드시 기본 패키지 내에 선언되어 있어야 한다
2) 객체를 만들고자 하는 클래스의 객체를 생성해 달라는 코드 작성
-> 객체 만들고자하는 클래스 상단에 annotation 사용
i) @component -> 스프링 초창기 버전, 요즘 잘 안씀, 사용해도 오류나진 않음
아래와 같이 세가지로 세분화하여 사용한다.
ii) @Controller
iii) @Service
iv) @ Repository
★위 4개의 Annotation을 사용하면 객체를 생성하는데,
생성되는 객체명은 클래스명의 앞글자만 소문자로 바꾼 이름으로 객체명이 정의된다.
ex)
@Controller
public class TestController{ }
-> TestController testController = new TestController(); 이런식으로 만들어진다.
객체명을 다르게 만들고 싶을 때 소괄호 안에 변수명 작성하여 지정 가능하다.
@Controller("controller")
public class TestController{ }
-> TestController controller = new TestController();
2. 프로젝트 생성과 동시에 만들어진 객체를 적절하게 의존성 주입시키는 코드 작성
1) 의존성 주입이 필요한 객체명 위에 Annotation을 적용하여 코드 작성
(이미 만들어진 객체를 필요한 객체에 주입시키는 것)
i) @Autowired - 자료형을 기준으로 의존성 주입 시킬 객체를 판단
ii) @Resource - 만들어진 객체명을 기준으로 의존성 주입을 시킨다.
상황) 프로젝트 시작(Run)과 동시에 만들어진 객체 정보
a. BoardController controller = new BoardController();
b. BoardService service = new BoardService();
c. BoardDTO board = new BoardDTO();
d. BoardService service1 = new BoardService();
public class Test1{
@Autowired - 자료형을 기준으로 의존성 주입을 시킬 객체 판단
(해석: private BoardDTO dto = board;)
private BoardDTO dto; <- c 사용
*오류 발생 코드
@Autowired -> 자료형이 같은것이 두가지가 있기에 무엇을 넣어야 할지 모른다
private BoardService service;
@Resource (name = "service") 객체명이 service인걸로 의존성 주입 시키겠다.
private BoardService service;
*오류 발생 코드
@Resource(name ="controller") - 객체명 불일치로 의존성 주입 불가
private BoardService service;
*오류 발생 코드
@Autowired - MemberDTO 자료형 없음
private MemberDTO member;
}
Thymeleaf 기초
<table border="1">
<tr>
<td>제목</td>
<td>작성자</td>
<td>index(index 0부터)</td> <!-- (현재 반복중인 index번호 0부터 시작) -->
<td>count(index 1부터)</td> <!--현재 반복중인 index번호 1부터 시작 -->
<td>size(총개수)</td> <!-- 총 개수 -->
<td>current(현재 반복 객체 정보)</td> <!-- 현재 반복되고 있는 객체 정보 -->
<td>even(짝수)</td> <!-- 짝수행에 true -->
<td>odd(홀수)</td> <!--홀수행에 true -->
<td>first(첫 행)</td> <!-- 첫 행 여부 -->
<td>last(마지막 행)</td> <!--마지막 행 여부 -->
</tr>
<tr th:each="board, status : ${list}">
<td th:text="${board.title}"></td>
<td th:text="${board.writer}"></td>
<td th:text="${status.index}"></td>
<td th:text="${status.count}"></td>
<td th:text="${status.size}"></td>
<td th:text="${status.current}"></td>
<td th:text="${status.even}"></td>
<td th:text="${status.odd}"></td>
<td th:text="${status.first}"></td>
<td th:text="${status.last}"></td>
</tr>
</table>
status 작성하지 않고 사용하기 Statu
<table border="1">
<tr>
<td>제목</td>
<td>작성자</td>
<td>index(index 0부터)</td> <!-- (현재 반복중인 index번호 0부터 시작) -->
<td>count(index 1부터)</td> <!--현재 반복중인 index번호 1부터 시작 -->
<td>size(총개수)</td> <!-- 총 개수 -->
<td>current(현재 반복 객체 정보)</td> <!-- 현재 반복되고 있는 객체 정보 -->
<td>even(짝수)</td> <!-- 짝수행에 true -->
<td>odd(홀수)</td> <!--홀수행에 true -->
<td>first(첫 행)</td> <!-- 첫 행 여부 -->
<td>last(마지막 행)</td> <!--마지막 행 여부 -->
</tr>
<tr th:each="board : ${list}">
<td th:text="${board.title}"></td>
<td th:text="${board.writer}"></td>
<td th:text="${boardStat.index}"></td>
<td th:text="${boardStat.count}"></td>
<td th:text="${boardStat.size}"></td>
<td th:text="${boardStat.current}"></td>
<td th:text="${boardStat.even}"></td>
<td th:text="${boardStat.odd}"></td>
<td th:text="${boardStat.first}"></td>
<td th:text="${boardStat.last}"></td>
</tr>
</table>
<table border="1">
<!-- #numbers 타임리프 내 함수 사용할 때 # 붙인다 -->
<tr th:each="num : ${#numbers.sequence(1, 5)}">
<td th:text="${num}"></td>
</tr>
</table>
'Spring Boot' 카테고리의 다른 글
[ajax] 학생정보시스템 점수상세페이지, 점수등록 (0) | 2022.09.12 |
---|---|
[Ajax] 학생정보시스템 목록 조회, 학급별 목록 조회 (insertAdjacentHTML) (0) | 2022.09.12 |
[board] 게시글 수정, 삭제 (0) | 2022.09.12 |
[board] 게시글 등록(sequence), 상세조회하기 (0) | 2022.09.12 |
[board] 게시판 목록 페이지 조회(게시판 목록, 페이지 수 표시, 게시글 검색, a태그) (0) | 2022.09.12 |