728x90

개발/Java & Kotlin 134

[Java] 예외처리

자바의 정석 챕터 8을 읽고 정리 개발하다가 '내가 예외처리를 제대로 하고 있는게 맞을까?' 생각이 들어서 책을 보게 됐다.(기초부터 다시 공부하기 위해) 1. 프로그램 오류 - 컴파일 에러: 컴파일 시 발생하는 에러 - 런타임 에러: 실행 시 발생하는 에러 - 논리적 에러: 실행은 되지만, 의도와 다르게 동작하는 것 - 에러: 코드에 의해서 수습될 수 없는 심각한 오류 - 예외: 코드에 의해서 수습될 수 있는 다소 미약한 오류 2. 예외 클래스의 계층구조 - 모든 예외의 최고 조상인 Exception 클래스 3. 예외처리하기 - try-catch - 예외처리의 정의: 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드를 작성하는 것 - 예외처리의 목적: 프로그램의 비정상 종료를 막고, 정상적인 실행상..

[Spring] Message 적용해보기

개발하다보면 한 화면을 여러 언어로 보여줘야 하는 경우가 있다. 언어마다 같은 HTML을 작성하지 않고, 스프링을 이용하여 편리하게 구현해봤다. - 먼저 Bean 등록을 해준다. LocaleConfig라는 파일을 생성하여 작성했다. - @Value값 안에 들어가는 내용은 application.properties에 작성했다. - basename에는 앞으로 여러 언어를 같은 코드로 관리하기 위한 파일인 messages.properties파일의 경로를 넣어주었다. - 나같은 경우 messages/messages를 넣었다. - encoding은 UTF-8을 넣어주었다. - 스프링 부트의 경우 Bean등록을 안해도 된다는 글들이 많았는데, 안해주니 나는 에러가 발생했다.(해주면 이상 없음) @Bean public..

[Spring] Validation 적용해보기

프론트에서만 유효성 검사를 했었는데, 언제든지 우회할 수 있다고 듣고, 서버쪽에서도 유효성 검사하는 로직을 추가하려했다. 근데 스프링에서는 validation이라는 프레임워크로 편하게 할 수 있었다. 그 과정을 남기려고 한다. - 라이브러리 설치(build.gradle) implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.5.2' - 먼저 회원가입을 한다고 하면 User 엔티티가 필요하다. @Entity @Getter @NoArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDEN..

[Spring] 스웨거(Swagger) 라이브러리

기존에는 api 테스트를 위해서 포스트맨을 사용했는데, 스웨거는 서버로 요청되는 api 리스트를 html 화면으로 문서화해서 테스트할 수 있는 라이브러리이다. @RestController를 읽어서 api를 분석해서html문서로 정리해준다. 아주 편리해보인다. - dependency에 아래 두 가지를 넣어준다. implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' - 나는 gradle을 사용 중이기 때문에 buid.gradle 파일 안에 넣어줬다. - config..

[Java] Generics

자바의 정석 챕터 13을 읽고 정리 1. 지네릭스란? - 지네릭스는 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시 타입 체크를 해주는 기능 - 타입 안정성 제공 - 타입체크와 형변환을 생략할 수 있어서 코드가 간결해짐 2. 지네릭 클래스 선언 - 클래스에 지네릭 타입을 넣을 수 있다. class Box { Object item; void setItem(Object item) { this.item = item; } Object getItem() { return item; } } // 지네릭 타입 T를 선언 class Box { T item; void setItem(T item) { this.item = item; } T getItem() { return item; } } - T는 타입변..

[Java] 컬렉션 프레임워크 (2)

자바의 정석 챕터 11을 읽고 정리 1.4 Hashset - Hashset은 Set 인터페이스를 구현한 가장 대표적인 컬렉션 - 중복된 요소를 저장하지 않음 - 저장순서를 유지하지 않음 Object[] objArr = {"1", new Integer(1), "2", "2", "3", "3"}; Set set = new Hashset(); for (int i = 0; i < objArr.length; i++) { set.add(objArr[i]); } System.out.println(set); // [1, 1, 2, 3] - "1", "1"은 눈으로 볼 때는 같지만 첫 번째는 String 인스턴스이고, 하나는 Integer 인스턴스라서 중복으로 보지 않음 - 순서 보장을 원하면 LinkedHashSet ..

[Java] 컬렉션 프레임워크 (1)

자바의 정석 챕터 11을 읽고 정리 1. 컬렉션 프레임워크 - 데이터 군을 저장하는 클래스들을 표준화한 설계 - 컬렉션은 다수의 데이터를 말한다. 1.1 컬렉션 프레임워크의 핵심 인터페이스 - 컬렉션 데이터 그룹은 3가지 (1) List: 순서가 있는 데이터 집합. 중복 허용 구현클래스: ArrayList, LinkedList, Stack, Vector 등 (2) Set: 순서가 없는 데이터 집합, 중복 허용X 구현클래스: HashSet, TreeSet 등 (3) Map: 키와 값의 쌍으로 이루어진 데이터 집합. 순서 없음. 키는 중복 허용X. 값은 중복 허용 - Vector나 Hashtable은 사용하지 말고, ArrayList, HashMap 사용하기 Collection인터페이스 - List와 Set..

[Spring] 스프링 시큐리티 (3)

스프링 시큐리티가 변경되었다. - 버전 5.7.0-M2 버전부터 변경되었고, SecurityFilterChain을 빈으로 등록해서 사용해야 한다. - 아래 코드는 카카오 로그인 구현 중에 작성한 코드다. private final CustomOauth2UserService customOauth2UserService; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf().disable() // enable h2-console .headers() .frameOptions() .disable() .and() .authorizeRequests() .antMatchers("/api/**").perm..

[Java] 객체 지향 설계 5원칙 - SOLID

스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 간단한 정리. SOLID는 아래 5가지 원칙의 앞 글자를 따서 부르는 이름 (1) SRP(Single Responsibility Principle): 단일 책임 원칙 (2) OCP(Open Closed Principle): 개방 폐쇠 원칙 (3) LSP(Liskov Substitution Principle): 리스코프 치환 원칙 (4) ISP(Interface Segregation Principle): 인터페이스 분리 원칙 (5) DIP(Dependency Inversion Principle): 의존 역전 원칙 1. SRP - 단일 책임 원칙 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. - 단일 책임 원칙은 클래스 이외에도 속성, ..

[Java] 자바가 확장한 객체 지향

스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 간단한 정리. 1. abstract 키워드 - 추상 메소드와 추상 클래스 - 추상메소드는 선언부는 있지만 구현부가 없는 메소드 - 추상 메소드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스로 선언해야 함 - 추상 클래스의 필요 이유 public class Driver { public static void main(String[] args) { Animal[] animals = new Animal[3]; animals[0] = new mouse(); animals[1] = new cat(); animals[2] =. ew dog(); for (int i = 0; i < animals.length; i++) { anumals[i].cry(); } ..

728x90