웹개발의 봄, Spring 01

5w31892p·2022년 12월 12일
0

Spring

목록 보기
4/30

📜 Spring

:: ✍ 1주차

void : 비었다. 안돌려준다.

메인 함수 안에서 실행을 하려면 static이라는 것을 써줘야 한다

리스트는 .length가 아니라 .size (size는 개수를 세어주는 것)

:: 메소드

  • 반복적인 행동을 줄여서 어디든 갖다쓸 수 있는 명령 모음
  • class 아래 적어줌
  • main에서 실행할 때에는 메소드명(); 으로 실행
public (반환타입) 메소드명(파라미터) {
	// 명령 내용
	return (반환값)
}
  • 파라미터 = 재료
  • 명령 = 실행코드
  • 결과 = 반환값
// 파라미터 X, 반환값 X
public void simplePrint() {
    System.out.println("파라미터도 없고, 반환값도 없어요!");
}

// 파라미터 O, 반환값 X
public void simpleSum(int num1, int num2) {
    System.out.println("num1 :" + num1 + ", num2: " + num2);
}

// 파라미터 X, 반환값 O
public int simpleReturn() {
    return 3;
}

// 파라미터 O, 반환값 O
public int sum(int num1, int num2) {
    return num1 + num2;
}

퀴즈

정수를 받아 뺀 값 반환하는 메소드 만들고 값 인쇄

public static int sub(int num1, int num2) {
    return num1 - num2;
}

public static void main(String[] args) {
    int result = sub(1, 2);
    System.out.println(result);
}

:: 반복문

for (시작조건; 계속하는조건; 더하기) {
	명령
}

퀴즈

주어진 목록 하나씩 인쇄하는 반복문 작성

List<String> celebs = new ArrayList<>();
celebs.add("아이유");
celebs.add("린다G");
celebs.add("은비");
celebs.add("금비");
celebs.add("비");
celebs.add("차은우");
celebs.add("남주혁");
celebs.add("수지");
celebs.add("정우성");
celebs.add("제니");
celebs.add("정국");

for (int i=0; i<celebs.size(); i++) {
	String celeb = celebs.get(i);
	System.out.println(celeb);
}

주어진 과일 개수 세고, 그 수 반환 메소드 만들기
public class Prac {
    public static int countFruit(String fruit) {
        List<String> fruits = new ArrayList<>();
        fruits.add("감");
        fruits.add("배");
        fruits.add("감");
        fruits.add("딸기");
        fruits.add("수박");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("딸기");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("감");

        int count = 0;
        for (int i = 0; i < fruits.size(); i ++) {
            String f = fruits.get(i);
            if (f == fruit) {
                count ++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int gam = countFruit("감");
        int subak = countFruit("수박");
        System.out.println(gam); // 3
        System.out.println(subak); // 4
    }
}

:: 클래스

  • 현실과 비슷한 개념(객체)을 나타내기 위한 자바의 도구
  • 클래스 내 정보를 멤버 변수
  • Course course = new Course();
    변수 course 는 실제 빵, Course 클래스는 빵틀

:: 생성자

  • 클래스명과 똑같은 이름을 가진 메소드
  • this 라고 표시함으로써, 빵틀 전체의 값을 바꾸는게 아니라 빵 하나의 값만 바꾸는 것
// 기본 생성자
public Course() {

}

// 생성자
public Course(String title, String tutor, int days) {
    this.title = title;
    this.tutor = tutor;
    this.days = days;
}

:: Getter, Setter

Getter

  • 정보를 가져오는 메소드

Setter

  • 정보를 바꾸는 메소드
  • 반환할 것이 없으므로 void
package com.sparta.week01.prac;

public class Course {
    // title, tutor, days 가 Course 라는 맥락 아래에서 의도가 분명히 드러나죠!
    private String title;
    private String tutor;
    private int days;

    public Course() {
    }

    public Course(String title, String tutor, int days) {
        this.title = title;
        this.tutor = tutor;
        this.days = days;
    }

    // setter
    public void setTitle(String title) {
        this.title = title;
    }

    public void setTutor(String tutor) {
        this.tutor = tutor;
    }

    public void setDays(int days) {
        this.days = days;
    }

    // getter
    public String getTitle() {
        return this.title;
    }

    public String getTutor() {
        return this.tutor;
    }
    public int getDays() {
        return this.days;
    }
}




Course course = new Course();
course.setTitle(title);
course.setTutor(tutor);
course.setDays(days);
System.out.println(course.getTitle());
System.out.println(course.getTutor());
System.out.println(course.getDays());

:: RestController

  • 데이터로 응답하려면, RestController 를 사용
  • Rest : 서버의 응답이 JSON 형식
  • Conroller : 자동 응답기
  • 즉, JSON 으로 응답하는 자동응답기

@RestController : 자동응답기라는 신호
@GetMapping : GET 방식

:: ✍ 2주차

:: RDBMS, H2, SQL

RDBMS (Relational DataBase Management System)

  • 컴퓨터에 정보를 저장하고 관리하는 기술

h2 웹콘솔 설정

spring.h2.console.enabled=true // 보이게 해줘
spring.datasource.url=jdbc:h2:mem:testdb // h2 쓸거야!

SQL 연습

  1. 테이블 생성
CREATE TABLE IF NOT EXISTS courses ( 
    id bigint(5) NOT NULL AUTO_INCREMENT, 
    title varchar(255) NOT NULL, 
    tutor varchar(255) NOT NULL, 
    PRIMARY KEY (id)
);

// courses라는 테이블이 없다면 만들어라
// bigint == Long, 
// AUTO_INCREMENT 자동으로 증가해라
// NOT NULL null이면 안된다!!
// varchar == String
// PRIMARY KEY (id) id값으로 구분하겠다!
  1. 데이터 삽입
INSERT INTO courses (title, tutor) VALUES
    ('웹개발의 봄, Spring', '남병관'), ('웹개발 종합반', '이범규');
  1. 데이터 조회
SELECT * FROM courses;

:: JPA, Repository

JPA

  • 번역기
  • SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기
  • domain = entity

@NoArgsConstructor : 기본 생성자 대신 생성
@Entity : 테이블 나타냄
@Id : ID 값, Primary Key로 사용하겠다는 뜻
@GeneratedValue(strategy = GenerationType.AUTO) : 자동 증가 명령
@Column(nullable = false) : 컬럼 값이고 반드시 값이 존재해야 함

:: 생성일자, 수정일자

  • Timestamped.java
  • abstract = 직접 구현 안된다. 상속으로만 쓸 수 있다.
  • Course.java -> Course extends Timestamped

@Getter : 정보를 가져오는 메소드
@MappedSuperclass : 상속했을 때, 컬럼으로 인식
@EntityListeners(AuditingEntityListener.class) : 생성/수정 시간을 자동으로 반영하도록 설정
@CreatedDate : 생성일자
@LastModifiedDate : 마지막 수정일자

:: CRUD

  • 생성 (Create) / 조회 (Read) / 변경 (Update) / 삭제 (Delete)

스프링의 구조

  • Controller : 가장 바깥 부분, 요청/응답을 처리
  • Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분
  • Repo : 가장 안쪽 부분, DB와 맞닿아 있음 (Repository, Entity)

:: API, Lombok, DTO

Lombok

  • 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성 -> 코드 단축 도와주는 라이브러리

Course.java : Getter, NoArgsConstructo
CourseService.java : RequiredArgsConstructor (final하고 @ RequiredArgsConstructor 붙히면 아무대서나 가져다 쓸 수 있음 )

:: DTO (Data Transfer Object)

  • 데이터 물고 다니는 놈
  • 완충재 역할

:: API

  • 클라이언트 - 서버 간의 약속
  • 주소에 들어가는 명사들은 복수형을 사용
  • 동사는 가급적 사용하지 않음
  • GET : 조회
  • POST : 생성
  • PUT : 수정
    @PathVariable : 뒤에 아이디 값 넣어주는 용도
  • DELETE : 삭제

RestController : JSON형식으로 받는 자동응답기
Service : 업데이트시 필요
Repository : 생성, 삭제, 조회에 필요
RequestDto : 요청시 필요한 변경 옮김이
abstract > 상속이 되어야만 사용 가능 , new 이런식으로 사용 못함

findAllByModifiedAtBetweenOrderByModifiedAtDesc(startDatetime, endDatetime)
findAll: 모두 찾아라
ByModifiedAtBetween: 수정된 시간들 사이(start,end) 에서
OrderByModifiedAtDesc: 수정된 시간을 기준으로 내림차순

:: ✍ 3주차

  • 코드보면서 익히기

0개의 댓글