-
Notifications
You must be signed in to change notification settings - Fork 1
2주차 자바 기본 정리
김민석
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다
- 요청은 하나의 개체,사용자 에이전트에 의해 전송
- 각각의 개별적인 요청들은 서버로 보내지며, 서버는 요청을 처리하고 response라고 불리는 응답을 제공
- 다양한 작업을 수행하는 게이트웨이, 캐시 역학을 하는 프록시 등이 존재
-
프록시
- 컴퓨터/머신 중에서도 애플리케이션 계층에서 동작하는 것들
- 눈에 보이거나 그렇지 않을 수 있으며 다양한 기능들을 수행
- 캐싱, 필터링, 로드 밸런싱, 인증, 로깅
- 브라우저는 완전한 문서인 웹 페이지를 표시하기 위해 리소스들을 혼합
- 브라우저에 의해 실행된 스크립트는 이후 단계에서 좀더 많은 리소스들을 가져올수 있고 그에 따라 웹페이지를 경신
주혁
- 자바에서 클래스란 객체를 만들어내기 위한 설계도 또는 틀과 같은 의미로 사용된다
- 클래스 모양 그대로 생성된 실체를 객체라고 한다
- 자바 클래스는 class키워드를 사용하여 선언한다
- 클래스의 구성요소를 멤버(member)라고 부르며, 멤버는 속성을 표현하는 필드(field)와 기능을 나타내는 메소드(method)를 가진다
- 메소드는 클래스 내에 정의된 함수로, 객체의 행동을 정의한다. 메소드는 매개변수를 받아 처리하고 결과를 반환할 수 있다.
- 변수는 데이터를 저장하는 공간이다. Java에서는 다음과 같이 세 가지 주요 유형의 변수를 사용합니다.
- 지역 변수(Local Variables): 메소드 내에서 선언되며 메소드 실행이 끝나면 소멸
- 인스턴스 변수(Instance Variables): 클래스 안에서 메소드 밖에 선언되며 객체의 상태를 저장
- 클래스 변수(Class Variables): static 키워드를 사용하여 클래스에 속하고 모든 인스턴스가 공유하는 변수
-
기본 구조
모든 Java 프로그램은 클래스 내부에 작성된다. 프로그램 실행의 시작점은 main 메소드이다
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
-
Java에서 사용하는 주요 데이터 타입:
-
기본형(Primitive types): int, double, float, boolean, char 등
-
참조형(Reference types): String, 배열, 클래스 등
int number = 100; boolean result = true; String text = "Hello Java";
-
-
변수
변수는 데이터를 저장하는데 사용되며, 선언 시 타입을 명시해야 한다
int age = 30; double price = 19.99;
-
연산자:
Java에서는 다양한 연산자를 사용할 수 있습니다.
산술 연산자:
+
,-
,\*
,/
,%
비교 연산자:
==
,!=
,>
,<
,>=
,<=
논리 연산자:
&&
,||
,!
소은
태그 안의 텍스트를 서버에서 전달 받은 값에 따라 표현하고자 할 때 사용한다.
<p th:text="${message}">Default message</p>
-
${message}
- 데이터를 나타내는 방법 중 하나 -
Default message
- th:text 속성에 대한 대체 텍스트-
변수에 값이 없을 때 렌더링 되는 기본 값
-
${message}
이 값을 가지고 있지 않을 때 대신 표시된다.
-
-
model.addAttribute("message", "메세지 입니다." );
- message 변수 안에 “메세지 입니다.” 라는 값이 들어간다.
<실습 코드>
<h1 th:text="${title}">제목</h1>
<h3 th:text="${content}">내용</h3>
<h5 th:text="${date}">작성 시간</h5>
model.addAttribute("title", "겨울" );
model.addAttribute("content", "눈사람 만들고 싶다!" );
model.addAttribute("date", Date );
<실습 사진>
//TODO: th:2주차 코드 예제 작성
<tr th:each="아이템 : ${반복할리스트}">
<td th:text="${아이템.프로퍼티1}">default value</td>
<td th:text="${아이템.프로퍼티2}">defulat value</td>
</tr>
th:each="사용할 변수명, 상태 변수명: ${배열 값}"
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Arrays;
import java.util.List;
@Controller
public class ItemController {
@GetMapping("/items")
public String getItems(Model model) {
**List<String> items = Arrays.asList("Item1", "Item2", "Item3");
model.addAttribute("items", items);
return "items";**
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Items List</title>
</head>
<body>
<ul>
<li th:each="item : ${items}" th:text="${item}">Placeholder Item</li>
</ul>
</body>
</html>
Items List
Item1
Item2
Item3
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Arrays;
import java.util.List;
@Controller
public class ProductController {
@GetMapping("/products")
public String getProducts(Model model) {
List<Product> products = Arrays.asList(
new Product("Product1", 10.0),
new Product("Product2", 20.0),
new Product("Product3", 30.0)
);
model.addAttribute("products", products);
return "products";
}
public static class Product {
private String name;
private double price;
// Constructor, getters, and setters
public Product(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Products List</title>
</head>
<body>
<ul>
<li th:each="product : ${products}">
Name: <span th:text="${product.name}">Placeholder Name</span>,
Price: <span th:text="${product.price}">0.0</span>
</li>
</ul>
</body>
</html>
Name: Product1, Price:10.0
Name: Product2, Price:20.0
Name: Product3, Price:30.0
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Products List</title>
</head>
<body>
<ul>
<li th:each="product, iter : ${products}">
Index: <span th:text="${iter.index}">0</span>,
Name: <span th:text="${product.name}">Placeholder Name</span>,
Price: <span th:text="${product.price}">0.0</span>,
Total: <span th:text="${iter.size}">0</span>,
Is Even: <span th:text="${iter.even}">false</span>
</li>
</ul>
</body>
</html>
Products List
Index: 0, Name: Product1, Price: 10.0, Total: 3, Is Even: true
Index: 1, Name: Product2, Price: 20.0, Total: 3, Is Even: false
Index: 2, Name: Product3, Price: 30.0, Total: 3, Is Even: true
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Products List</title>
</head>
<body>
<ul>
<li th:each="product : ${products}" th:if="${product.price > 15}">
Name: <span th:text="${product.name}">Placeholder Name</span>,
Price: <span th:text="${product.price}">0.0</span>
</li>
</ul>
</body>
</html>
Name: Product2, Price:20.0
Name: Product3, Price:30.0
도훈
if문
<div th:if="${state == 'TRUE'}">참</div>
<div th:if="${state == 'FALSE'}">거짓</div>
else-if문
<div th:if="${state == 'TRUE'}">참</div>
<div th:unless="${state == 'TRUE'}">거짓</div>
다중 조건 if문
<div th:if="${state == 'TRUE'} and ${name == 'dohun'}">맞음</div>
<div th:unless="${state == 'TRUE'} and ${name == 'dohun'}">아님</div>
예시 코드
@Controller
public class FirstController {
@GetMapping("/thif")
public String getThif(Model model, @RequestParam String state, @RequestParam String name){
model.addAttribute("state", state);
model.addAttribute("name", name);
return "thif";
}
}
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>thif TEST</title>
</head>
<body>
<div>
<div>if문 결과</div>
<div th:if="${state == 'TRUE'}">참</div>
<div th:if="${state == 'FALSE'}">거짓</div>
<br />
<div>if-else문 결과</div>
<div th:if="${state == 'TRUE'}">참</div>
<div th:unless="${state == 'TRUE'}">거짓</div>
<br />
<div>다중 조건 if문 결과</div>
<div th:if="${state == 'TRUE'} and ${name == 'dohun'}">맞음</div>
<div th:unless="${state == 'TRUE'} and ${name == 'dohun'}">아님</div>
</div>
</body>
</html>
결과
//TODO:타임리프 ,프로퍼티스 문법 Thymeleaf는 View Templete Engine으로 JSP,Freemarkerd와 같이 서버에서 클라이언트에게 응답할 브라우저 화면을 만들어주는 역할을 한다.
☞목표는 템플릿을 만들 때 유지관리가 쉽도록 하는 것이다. 타임리프의 장점
- 코드를 변경하지 않기 때문에 디자인 팀과 개발 팀간의 협업이 편함
- JSP와 달리 Servlet Code로 변환되지 않기 때문에 비즈니스 로직과 분리되어 오로지 View에 집중할 수 있다.
타임리프의 기본 설정
-
의존성 추가 Maven은 pom.xml에 Gradle은 build.gradle에 타임리프의 dependency를 추가해준다. Gradle: implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
-
타임리프를 적용할 HTML 문서에 네임스페이스 추가
<title>Title</title>
타임리프의 문법 xmlns:th=" " - 네임스페이스
JSP의 EL 표현식인 ${}와 마찬가지로 ${} 표현식을 사용해서 컨트롤러에서 전달받은 데이터에 접근할 수 있다. 등등 많은 문법이 있다.Properties ? Properties 는 설정 파일입니다.
- 자바 응용프로그램 내에서 사용되는 설정과 관련된 변수들을 파일에다가 쓰고 , 읽어오는 방식에 사용되는 파일입니다. 자바 외부에서 파일을 넣을 수도 있고 , 내부에서도 넣어서 사용할 수 있다.
설정과 관련된 변수들을 전부 문자열로 저장된다. 각 줄을 일반적으로 하나의 프로퍼티를 저장하며 , 한 문자열은 Key , value쌍으로 저장된다. 다음 파일은 application.properties파일로 스프링부트가 어플리케이션을 구동할 때 자동으로 로딩하는 파일입니다.
그렇다면 개발환경에 따라 properties를 다르게 사용하는 이유와 사용하는 방법은 어떻게 될까요 ?
☞ 개발을 하며 로컬 서버에서 구동할 때와 개발 서버에서 구동할 때, 실 서버에서 구동할 경우 설정 변수 값이 다르게 적용되는 경우가 많은데, 이럴 때 개발 환경에 따라 각각의 프로퍼티를 사용하면 다르게 사용되는 값들을 하나하나 다 바꿔주는 번거로운 일을 하지 않을 수 있습니다.
주의할 점은 , 새로 생성하는 properties는 application-{이름}.properties라는 규칙을 따라야 한다. 프로퍼티는 다양한 사용 방법이 있지만 그중에서 사용하는 @value 어노테이션을 통해 사용하는 방법을 알아보겠습니다. @Value 어노테이션은 org.springframework.beans.factory.annotation 패키지에 속해있습니다. @value("${key}")여기에 인스턴스를 정의하면 됩니다.
Copyright 2024. GDSC-DEU All rights reserved.