SeSAC 웹풀스택 18주차 | JAVA, Spring

hatban·2023년 3월 14일
0
post-thumbnail

추상 클래스

  • 추상 메소드를 갖는 클래스는 추상 클래스가 된다

  • 추상 메소드 없이도 추상 클래스를 만들 수 있다

  • 추상 클래스를 상속받는 서브 클래스에서 추상 메소드를 오버라이딩 해줘야한다.

  • 보통 리턴타입 전에 abstract를 붙인다(클래스와 메소드에 모두)

  • 추상 클래스로 객체를 만들 수 없다


추상 클래스의 용도

  • 설계와 구현의 분리
  • 슈퍼 클래스에서는 개념을 정의
    • 서브 클래스마다 다른 구현이 필요한 메소드는 추상 메소드로
  • 서브 클래스에서 구체적 행위 구현
    • 서브 클래스마다 목적에 맞게 추상 메소드를 구현
  • 자식 클래스(서브 클래스)는 무조건 추상 클래스의 모든 추상메소드를 구현해줘야한다(오버라이딩)


인터페이스

  • 추상 메소드의 모음
  • 여러 구현체에서 공통적인 부분을 추상화 하는 역할
  • 서브 클래스가 같은 동작을 한다는 것을 보장하기 위해 사용

🔥 추상클래스와 다른점

추상 클래스는 추상 메소드가 없어도 상관 x, 하지만 인터페이스는 무조건 있어야함

  • 메소드를 구현하지 못함, 추상 메소드만 존재
public interface InterfaceTest {
	// public int num; 인터페이스는 변수 선언 불가
	public final int num = 0; //상수는 선언 가능
	
	public abstract void test1();
	public abstract void test2(int num);
	
	/* 일반 메소드 불가
	public void test3() {
		
	}
	*/
}
  • public final 생략 가능, 대신 무조건 초기화 해야함
  • public abstract 생략가능
  • 하나의 클래스가 동시에 두 개의 클래스를 상속받을 수 없다
  • 하지만 인터페이스는 두개의 인터페이스를 상속할 수 있다


Spring

  • Java 기반의 웹 어플리케이션을 만들 수 있는 백엔드 프레임워크

스프링 프레임워크의 특징

1. IoC(Inversion of Control)

  • 제어 반전
  • 객체의 생성부터 소멸까지 개발자가 직접하는 것이 아닌 Spring Container가 대신 해주는 것
  • 제어권이 개발자가 아닌 IoC에 있으며 IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸해 생명주기를 관리한다

2. DI

  • 의존성 주입
  • 구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의
  • 코드간의 재사용률을 높이고 모듈간의 결합도를 낮출 수 있다
  • DI를 통해 IoC를 이룬다

3. AOP

  • 관점 지향 프로그래밍
  • 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는것
  • 기능을 비즈니스 로직과 공통 모듈로 구분한 후 개발자의 코드 밖에서 필요한 시점에 비즈니스 로직을 삽입하여 실행되도록 한다.

4. POJO

  • 단순한 자바 오브젝트
  • 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필이ㅛ에 따라 재활용 될 수 이있는 방식으로 설계된 오브젝트
  • getter/setter 같이 기본적인 기능만 가진 Java 오브젝트

Spring Boot란?

  • 스프링을 더 쉽게 이용하기 위한 도구
  • 스프링을 이용할 시 필요한 여러가지 세팅 작업들(톰캣서버설정, XML설정 등) 없이 쉽고 빠르게 프레임워크를 사용할 수 있도록 만들어진 것

Thymeleaf 템플릿

  • 템플릿 엔진의 일종으로 html 태그에 속성을 추가 페이지에 동적으로 값을 처리할 수 있게 도와주는 것

@Controller

  • 해당 클래스가 Controller 클래스라는 것을 Spring Container에게 알려준다

@GetMapping

  • URL을 매핑시켜주는 것으로 get method에 해당
  • app.get과 같은 get 방식
  • 리턴값은 res.render()과 같다, 렌더안의 파일은 templates에 위치해야한다
  • hi.html은 templates에 위치해야하고, /hi로 접속시 hi.html을 불러오겠다는 뜻

기본 문법

  • html태그 안에 소 문법을 추가한다
  • 이때, 태그는 div뿐만아니라 html에서 지원하는 태그들 모두 사용가능하다

th:text

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

th:utext

  • th:text와 유사
  • 변수에서 받은 값에 html 태그가 있다면 태그값을 반영해 표시
  • <strong>안녕</strong> 이 넘어오면 strong이 진짜로 찍히는게 아니라 html의 strong속성 반영
//HelloController.java
@GetMapping("/hi") //app.get 과 같음, get방식
    public String getHi(Model model){
        model.addAttribute("msg2", "<strong style=\"color: red\">Bye~</strong>");
        return "hi"; //res.render("hi") => hi라는 파일이 없으면 에러, 이 파일을 templates에 위치해야함
    }
//hi.html
<p th:utext="${msg2}"></p>

th:value

  • element들의 value값을 지정할 때 사용

th: with

  • 변수값을 지정해서 사용하고자할 때 사용
<span th:with="msg3='안녕? ' + ${msg1}" th:text="${msg3}"></span>
  • 실제로 컨트롤러에는 msg3을 넘겨주지 않는데, 그 값을 html에서 지정해준다

th:switch

  • switch-case문 이용할 때 사용
  • th:case에서 case문을 다루고 *로 case에서 다루지 않은 모든 경우 처리(default)

th: if

  • 조건문이 필요할 때 사용되는 문법
  • else문이 필요한 경우에는 th:unless를 사용한다
  • th:unless에 if에 적은 조건을 적어줘야 위의 if가 아닌 경우를 인식할 수 있다
  • ""안은 그냥 스크립트태그라고 생각하면 된다. 그러므로 문자열을 적을 때는 ‘’로 한번 더 감싸야한다
<p th:if="${age}<20" th:text="${age} + '세는 미성년자입니다.'" style="color:blue"></p>
<p th:unless="${age}<20" th:text="${age} + '세는 성인입니다.'" style="color:green"></p>

th: each

  • 반복문이 필요한 경우 사용
  • 리스트와 같은 collection 자료형을 서버에서 넘겨주면 그에 맞춰 반복적인 작업 이루어질때 사용
  • 그동안의 반복문과 다르게, 반복시키고 싶은것 여기서는 li에 each를 적고 그 하위에 값을 넣어줘야한다


API란?

  • 인터페이스란 어떤 장치간 정보를 교환하기 위한 수단이나 방법
  • 개발에서의 API는 요청과 응답을 구성하는 방법에 대한 정보가 들어있다

REST란?

  • 서버와 클라이언트 통신 방법 중 하나로, http URI 를 통해 자원을 명시하고 http method를 이용해 자원을 교환하는 통신 방법

REST의 특징

  • server-client 구조
  • Stateless(무상태)
  • Cacheable(캐시 처리 기능)
  • Layered System(계층화)
  • Uniform Interface(인터페이스 일관성)

장점

  • http 프로토콜의 인프라를 그대로 사용해서 REST API 사용을 위한 별도의 인프라를 구축할 필요없다
  • http 표준 프로토콜을 따르는 모든 플랫폼에서 사용가능
  • 서버와 클라이언트의 역할을 명확하게 분리

단점

  • http method 형태가 제한적
  • 구형 브라우저에서는 호환이 되지 않아 지원해주지 못하는 동작이 많다(IE)

REST API란?

  • REST 아키텍처의 조건을 준수하는 API
  • REST의 규칙을 모두 지켜 구현된 웹 서비스를 RESTful 하다고 말한다

RESTful 이란?

  • REST의 원리를 따르는 시스템
  • 원리를 따르기만 한것이 아니라 REST API 설계 규칙을 올바르게 지킨 시스템이 RESTful한 시스템이다

DTO

  • data transfer object
  • 계층 간 데이터 교환을 위해 사용하는 객체
  • 다른 로직을 가지지 않는 순수한 데이터 객체(Java Bean)
  • getter setter만 가지고 있는 것

VO

  • value Object
  • DTO와 비슷하지만 VO는 readOnly속성을 갖고 있는 객체
  • getter만 가지고 있어 값에 대한 수정이 불가능
  • getter외에 다른 로직이 들어갈 수 있다

Spring

Bean이란?

  • Spring IoC 컨테이너가 관리하는 Java 객체
  • 스프링에서는 new를 이용해 만들어진 객체가 아니라 스프링에서 관리하는 Bean이라는 객체를 이용
  • 장점
    • 의존성 관리가 용이
    • 똑같은 객체가 여러번 만들어지는것이 아니라 하나를 만들면 그것을 재사용(메모리 절약)

Bean 등록방법

  • @Component
    • 가장 쉬운 방법으로 클래스 선언부에 @Component을 사용하면 된다
  • 자바 설정 클래스를 직접 만들어사용
    • 다시 피피티 보기

Annotation

  • @(Annotation) 는 사전적 의미로 주석
  • 자바에서 @는 코드사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하게 해줌
  • 프로그램에게 추가적인 정보를 제공해주는 메타데이터

장점

  • 코드량이 감소
  • 유지보수가 쉽다
  • 생산성이 증가

사용순서

  • @를 정의한다
  • 클래스에서 @를 배치한다

@Bean

  • 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 등록하고자 할 때 사용되는 Annotation

@Component

  • 개발자가 직접 작성한 class를 bean으로 등록하기 위한 annotation
  • 즉 간단하게 Bean을 등록하기 위해 사용되는 annotation

@SprintBootApplication

  • @Configuration, @EnableAutoConfiguration, @ComponentScan 3 가~

@Autowired

  • 스프링 컨테이너에 등록한 Bean에게 의존 관계 주입이 필요할 때 DI(의존성 주입)을 도와주는 어너ㅗ테이션
  • 즉, @Autowired를 사용한 클래스에서 적용된 클래스를 사용할 수 있게 해준다

후기

앞으로 스프링으로 개발하는 백엔드와 작업할 수도 있고, 내가 나중에 백도 관심이 생겨서 공부할 수도 있기 때문에 스프링을 배우기 시작했다. DTO랑 VO가 어떤 차이인지는 알았지만 어떻게 쓰일 수 있는지 감을 잡고있는중이다. 사용예시를 더 많이 찾아봐야할 것 같다

0개의 댓글