Java 37

[Java] 생성자 (Constructor)

자바에서 생성자는 인스턴스 생성 시 호출되는 인스턴스 초기화 메서드이다. 생성자의 조건 1. 생성자의 이름은 클래스의 이름과 같아야 한다. 2. 생성자는 리턴값이 없다. 생성자도 오버로딩이 가능하기 때문에, 하나의 클래스에 여러 개의 생성자가 존재할 수 있다. 기본 생성자 (default constructor) 클래스 내에 생성자가 하나도 정의되지 않은 경우, 컴파일러는 자동적으로 기본 생성자를 추가해 컴파일한다. Class() { } 매개변수도 없고 내용도 없다. 매개변수가 있는 생성자 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업에 사용할 수 있다. class Car { String color; String gear; int door; Car() { } //기본 생성자 Car(S..

Java 2021.05.07

[Java Spring] TestRestTemplate

TestRestTemplate는 Spring Boot에서 컨트롤러를 테스트 하기 위해서 사용한다. 기존에 MockMvc도 컨트롤러를 테스트하는 라이브러리인데, 둘의 차이는 서블릿 컨테이너의 실행여부에 있다. MockMvc는 컨테이너를 실행하지 않는다. TestRestTemplate은 컨테이너를 직접 실행시킨다. 그리고 테스트의 관점의 차이가 있다. MockMvc는 서버의 입장에서 구현한 API를 통해 비지니스 로직에 문제가 없는지 테스트하고 TestRestTemplate는 클라이언트 입장에서 사용할 때 문제가 없는지 테스트한다.

Java 2021.04.19

[Java Spring] 빈 생명주기 (Bean Life cycle)

스프링 빈의 생명주기는 스프링 컨테이너 생성 - 빈 객체 생성 - 초기화 - 사용 - 소멸로 이루어진다. 왜 알아야 하는가? DB 커넥션 풀과 같이 애플리케이션의 시작 지점에 특정 작업을 수행하고, 종료 시점에도 작업을 수행해야 하는 경우가 있다. 이때 빈 생명주기를 알고, 각 단계를 활용하면 유용하다. 빈 생명주기 먼저, 스프링 빈은 객체 생성이 이루어지고 의존 관계 주입이 이루어진다. 별도의 초기화 단계가 필요하다. 초기화 3가지 1. @Bean에 initMethod 지정 빈 어노테이션에 initMethod 이름을 옵션으로 부여하고, 메서드를 정의한다. 2. InitializingBean 인터페이스를 통해 afterProperitesSet 메서드를 오버라이드한다. 3. @PostConstruct 어노..

Java 2021.04.16

[Java Spring] 트랜잭션 (Transaction)

트랜잭션이란 데이터 베이스 상태를 변환시키는 작업의 단위를 말한다. 데이터베이스 상태를 변환시키는 것은 SQL로 DB에 접근하는 행위를 말한다. 작업의 단위는 개발자가 설계하는 것으로, 하나의 논리적 기능을 수행하기 위한 단위를 말한다. 예를 들어, 게시판에 글을 작성하면 등록된 글이 조회되는 하나의 논리적 기능이 있다고 하면 글을 작성할 때, DB에 INSERT로 데이터를 입력하고, SELECT을 통해 조회하여 사용자에게 출력할 것이다. INSERT부터 SELECT까지 작업의 단위가 되는 것이다. 좋은 개발자는 좋은 트랜잭션 설계가 필요하다. 특징 트랜잭션은 4가지 특징을 갖는다. 1) 원자성 : 트랜잭션이 DB에 반영될 때, 모두 반영되거나 전혀 반영되지 않아야 한다. 부분적으로 반영되면 안된다. 2..

Java 2021.04.14

[Spring boot로 게시판 만들기] 1. DB부터 CRUD 로직 구현하기

이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹서비스를 공부하며 기록한 것입니다. 자세한 내용은 책을 통해 공부해야 하기 때문에 간단하게 정리한 내용만 있습니다. 1. 롬복 Lombok, Gradle에 추가하기 build.gradle의 의존성 설정에 dependencies { compile(org.projectlombok:lombok) } 을 추가하고, [settings]-[Annotation Processor]에서 Enable annotation processing을 체크한다. 2. Spring Data JPA 적용하기 웹 애플리케이션에서 관계형 데이터베이스(RDB)는 빠질 수 없는 요소로, 애플리케이션 코드보다 SQL로 채워졌었다. SQL을 통해서만 데이터베이스에 저장하고 조회하다보니 SQL이 ..

Java/Spring 2021.04.13

[Java] 롬복 Lombok

롬복 Lombok은 자바 개발할 때 자주 사용하는 Getter, Setter, 기본생성자, toString 등을 어노테이션으로 자동생성해준다. 의존 설정 (in gradle) repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:{version}' annotationProcessor 'org.projectlombok:lombok:{version}' testCompileOnly 'org.projectlombok:lombok:{version}' testAnnotationProcessor 'org.projectlombok:lombok:{version}' } 사용되는 어노테이션 @Getter : 선언된 모든 필드의..

Java 2021.04.13

[Java Spring] JPA Auditing

JAVA ORM 표준 JPA를 활용해 RDBS (관계형 데이터베이스)에 매핑할 때 공통적으로 가지는 필드나 컬럼이 존재한다. ex) 생성일자, 수정일자, 식별자 이 때 중복되는 코드가 많아지는데, JPA가 Audit 기능을 제공해 공통적인 컬럼들을 관리하도록 한다. Gradle 빌드 의존성에 spring-boot-starter-data-jpa만 추가하면 사용가능하다. 도메인 패키지에 공통으로 사용되는 컬럼을 정의한 클래스를 생성한다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public class BaseTimeEntity { @CreatedDate private LocalDateTime createdDate; @L..

Java 2021.04.10

[Spring boot로 게시판 만들기] 0. 프로젝트 생성부터 index.html

0. 프로젝트 생성 https://start.spring.io/ 에 접속한다. Build Tool은 Gradle로 선택했다. 언어는 JAVA. Spring Boot 버전의 경우 SNAPSHOT이나 M3가 붙지 않은 안정적인 버전을 선택한다. Group과 Artifact는 임의로 지정했다. Group 모든 프로젝트에서 이 프로젝트를 식별하게 해주는 식별자 역할을 한다. 원래, Java 패키지 이름 규칙을 따라 제어하는 도메인 이름의 반대로 시작해야 한다. ex) org.springframework와 같이 Artifact는 버전 없는 JAR 파일의 이름, 특수문자 없이 소문자로만 지정해야 한다. Packaging 방식은 WAR를 선택했다. JAR*와 WAR** 모두 자바 애플리케이션을 쉽게 배포하고 동작시킬..

Java/Spring 2021.04.08

[Java Spring] 컨테이너와 IoC, DI

제어의 역전 IoC (Inversion Of Control) 기존에는 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 구현 객체가 프로그램을 제어했다. 하지만, 좋은 객체 지향 프로그래밍을 위해 역할과 기능을 분리하면서 구현 객체는 자신의 기능을 수행하기만 한다. 프로그램을 제어하는 것은 역할과 기능을 매칭하는 구성자*에게 주어진다. 구성자는 사용영역이 아닌 외부에 존재한다. 제어의 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라고 한다. * 제어의 역전과 의존관계 주입을 위해 사용되는 구성자를 IoC 컨테이너 또는 DI 컨테이너라고 한다. 다르게는 어셈블러, 오브젝트 팩토리 등으로 부르기도 한다. (아래에서부터 컨테이너라고 하겠음...

Java 2021.04.08

[Java] 좋은 객체지향 프로그래밍 5원칙 (SOLID)

좋은 객체 지향 프로그램을 위한 5가지 원칙 SRP SRP (Single Responsibility Principle) 단일 책임의 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 클래스가 여러가지 기능을 가져서 복잡한 연관 관계를 갖지 않는 것. 변경이 있을 때 파급효과가 적으면 SRP를 잘 따른 것. OCP OCP (Open-Closed Principle) 개방-폐쇄 원칙 가장 중요한 원칙 중 하나. 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다. 다형성을 활용해 지킨다. 사용되는 코드의 영역에서 변경은 없으나, 코드는 확장될 수 있어야 한다. 처음에 이해하기 어려웠지만, 생각해보면 인터페이스, 클래스를 구분해 역할과 기능을 구분한 것처럼 새로운 클래스, 더 확장된 클래스는..

Java 2021.04.07
반응형