추상 클래스
-
추상 메소드를 갖는 클래스는 추상 클래스가 된다
-
추상 메소드 없이도 추상 클래스를 만들 수 있다
-
추상 클래스를 상속받는 서브 클래스에서 추상 메소드를 오버라이딩 해줘야한다.
-
보통 리턴타입 전에 abstract를 붙인다(클래스와 메소드에 모두)
-
추상 클래스로 객체를 만들 수 없다
추상 클래스의 용도
- 설계와 구현의 분리
- 슈퍼 클래스에서는 개념을 정의
- 서브 클래스마다 다른 구현이 필요한 메소드는 추상 메소드로
- 서브 클래스에서 구체적 행위 구현
- 서브 클래스마다 목적에 맞게 추상 메소드를 구현
- 자식 클래스(서브 클래스)는 무조건 추상 클래스의 모든 추상메소드를 구현해줘야한다(오버라이딩)
인터페이스
- 추상 메소드의 모음
- 여러 구현체에서 공통적인 부분을 추상화 하는 역할
- 서브 클래스가 같은 동작을 한다는 것을 보장하기 위해 사용
🔥 추상클래스와 다른점
추상 클래스는 추상 메소드가 없어도 상관 x, 하지만 인터페이스는 무조건 있어야함
public interface InterfaceTest {
public final int num = 0;
public abstract void test1();
public abstract void test2(int num);
}
- 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속성 반영
@GetMapping("/hi")
public String getHi(Model model){
model.addAttribute("msg2", "<strong style=\"color: red\">Bye~</strong>");
return "hi";
}
//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가 어떤 차이인지는 알았지만 어떻게 쓰일 수 있는지 감을 잡고있는중이다. 사용예시를 더 많이 찾아봐야할 것 같다