Skip to content

2주차 자바 기본 정리

wive10 edited this page Jun 5, 2024 · 2 revisions

HTTP란?

김민석

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다

HTTP 다이어그램

  • 요청은 하나의 개체,사용자 에이전트에 의해 전송
  • 각각의 개별적인 요청들은 서버로 보내지며, 서버는 요청을 처리하고 response라고 불리는 응답을 제공
  • 다양한 작업을 수행하는 게이트웨이, 캐시 역학을 하는 프록시 등이 존재
  • 프록시
    • 컴퓨터/머신 중에서도 애플리케이션 계층에서 동작하는 것들
    • 눈에 보이거나 그렇지 않을 수 있으며 다양한 기능들을 수행
  • 캐싱, 필터링, 로드 밸런싱, 인증, 로깅
  • 브라우저는 완전한 문서인 웹 페이지를 표시하기 위해 리소스들을 혼합
  • 브라우저에 의해 실행된 스크립트는 이후 단계에서 좀더 많은 리소스들을 가져올수 있고 그에 따라 웹페이지를 경신

JAVA 기본 문법

주혁

class와 객체

클래스(class):

  • 자바에서 클래스란 객체를 만들어내기 위한 설계도 또는 틀과 같은 의미로 사용된다
  • 클래스 모양 그대로 생성된 실체를 객체라고 한다

클래스의 구성:

  • 자바 클래스는 class키워드를 사용하여 선언한다
  • 클래스의 구성요소를 멤버(member)라고 부르며, 멤버는 속성을 표현하는 필드(field)와 기능을 나타내는 메소드(method)를 가진다

메소드(method):

  • 메소드는 클래스 내에 정의된 함수로, 객체의 행동을 정의한다. 메소드는 매개변수를 받아 처리하고 결과를 반환할 수 있다.

변수(variables):

  • 변수는 데이터를 저장하는 공간이다. Java에서는 다음과 같이 세 가지 주요 유형의 변수를 사용합니다.

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에서는 다양한 연산자를 사용할 수 있습니다.

    산술 연산자: +, -, \*, /, %

    비교 연산자: ==, !=, >, <, >=, <=

    논리 연산자: &&, ||, !

타임리프 기본 문법

th:text

소은

태그 안의 텍스트를 서버에서 전달 받은 값에 따라 표현하고자 할 때 사용한다.

<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주차 코드 예제 작성

예진

thymleaf반복문

기본 반복문

<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>

결과

thif 결과 thif 결과

준화

//TODO:타임리프 ,프로퍼티스 문법 Thymeleaf는 View Templete Engine으로 JSP,Freemarkerd와 같이 서버에서 클라이언트에게 응답할 브라우저 화면을 만들어주는 역할을 한다.

☞목표는 템플릿을 만들 때 유지관리가 쉽도록 하는 것이다. 타임리프의 장점

  1. 코드를 변경하지 않기 때문에 디자인 팀과 개발 팀간의 협업이 편함
  2. JSP와 달리 Servlet Code로 변환되지 않기 때문에 비즈니스 로직과 분리되어 오로지 View에 집중할 수 있다.

타임리프의 기본 설정

  1. 의존성 추가 Maven은 pom.xml에 Gradle은 build.gradle에 타임리프의 dependency를 추가해준다. Gradle: implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

  2. 타임리프를 적용할 HTML 문서에 네임스페이스 추가

    <title>Title</title>

    Name

타임리프의 문법 xmlns:th=" " - 네임스페이스

JSP의 EL 표현식인 ${}와 마찬가지로 ${} 표현식을 사용해서 컨트롤러에서 전달받은 데이터에 접근할 수 있다. 등등 많은 문법이 있다.

Properties ? Properties 는 설정 파일입니다.

  • 자바 응용프로그램 내에서 사용되는 설정과 관련된 변수들을 파일에다가 쓰고 , 읽어오는 방식에 사용되는 파일입니다. 자바 외부에서 파일을 넣을 수도 있고 , 내부에서도 넣어서 사용할 수 있다.

설정과 관련된 변수들을 전부 문자열로 저장된다. 각 줄을 일반적으로 하나의 프로퍼티를 저장하며 , 한 문자열은 Key , value쌍으로 저장된다. 다음 파일은 application.properties파일로 스프링부트가 어플리케이션을 구동할 때 자동으로 로딩하는 파일입니다. image

그렇다면 개발환경에 따라 properties를 다르게 사용하는 이유와 사용하는 방법은 어떻게 될까요 ?

☞ 개발을 하며 로컬 서버에서 구동할 때와 개발 서버에서 구동할 때, 실 서버에서 구동할 경우 설정 변수 값이 다르게 적용되는 경우가 많은데, 이럴 때 개발 환경에 따라 각각의 프로퍼티를 사용하면 다르게 사용되는 값들을 하나하나 다 바꿔주는 번거로운 일을 하지 않을 수 있습니다.

주의할 점은 , 새로 생성하는 properties는 application-{이름}.properties라는 규칙을 따라야 한다. 프로퍼티는 다양한 사용 방법이 있지만 그중에서 사용하는 @value 어노테이션을 통해 사용하는 방법을 알아보겠습니다. @Value 어노테이션은 org.springframework.beans.factory.annotation 패키지에 속해있습니다. @value("${key}")여기에 인스턴스를 정의하면 됩니다.