Backend 46

Integer.valueof() vs Integer.parseint() 차이 및 소스분석

자바에서 문자열을 int형 타입으로 형변환할 때, 흔히 Integer.parseInt() 또는 Interger.valueOf() 메서드를 사용한다. 이 둘의 차이점과 실제 Java API 소스를 가볍게 살펴보려고 한다.Integer.valueof() vs Integer.parseint() 차이parseInt() : int 타입을 반환valueOf() : Integer 래퍼(wrapper) 객체를 반환Java 내부 API 까보기 Integer.parseInt 메서드는 기본데이터 타입인 int 값으로 반환한다.public static int parseInt(String s) throws NumberFormatException { return parseInt(s, 10);} Integer.valueOf ..

Backend/Java 2024.05.17

JAVA 오버로딩, 오버라이딩을 통해 다형성 구현하기

다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것이다. 자바에서는 다형성을 위해 부모클래스 타입의 참조변수로 자식클래스 타입의 인스턴스를 참조할 수 있도록 한다. 오버로딩과 오버라이딩을 통해 다형성을 구현할 수 있다. 오버로딩과 오버라이딩의 비교 오버로딩과 오버라이딩은 그 단어의 유사함으로 인해 혼동하기 쉽다. 하지만 그 개념은 확실히 다르며, 그 차이점을 아는 것이 중요하다. 오버로딩(overloading)은 새로운 메서드를 정의하는 것이고, 오버라이딩(overriding)은 상속받은 기존의 메서드를 재정의하는 것이다. 오버로딩 오버라이딩 메서드명 동일 동일 매개변수 및 타입 다름 동일 리턴 타입 관계 없음 동일 다형성을 구현하는 방법 오버로딩 : 메서드명이 같지만 ..

Backend/Java 2024.03.20

자바 컬렉션 프레임워크(Java Collection Framework) 정리

자바 컬렉션 프레임워크(Java Collection Framework)배열을 보완하는 컬렉션(Collection)컬렉션(Collection)은 여러 요소들을 담을 수 있는 자료구조이다. 즉, 다수의 데이터 그룹이며 컨테이너(Container)라고도 부른다. 컬렉션은 배열과 비슷하지만, 크기가 고정된 배열을 보완하여 Re-sizable한 특성을 가진다. 자바 초창기에는 Vector, Stack, HashTable 등의 컬렉션 클래스만 제공했으나 자바 1.2 이후 표준적인 방식으로 컬렉션을 다루기 위한 컬렉션 프레임워크(Collection Framework)가 등장하였다. 모든 컬렉션 클래스명은 구현한 인터페이스명이 포함되어 있어서 바로 클래스의 특징을 바로 알기 쉽다. (예를 들어 HashMap 클래스는 ..

Backend/Java 2023.12.18

Spring Security 3 버전에서 h2.console.enabled : true일 때 servlet 오류 해결 방법

Spring security 3점대 버전에서 spring.h2.console.enabled=true 로 옵션을 주니 아래 오류가 발생했다. 문제 발생 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Unsatisfied dependency expressed through method 'setFilterChains' parameter 0: Error creating bean with name 'filterChain' de..

스프링부트 개발환경 구성하기 (9) 게시물 조회/등록/수정/삭제

포스팅 순서는 아래와 같다. OpenJDK 17 설치 STS 4 설치 스프링부트 프로젝트 생성 메이븐 Local Repository 설정 DB 설계와 REST API 설계 mybatis 연동과 게시판 목록 조회 페이징 (Mybatis에서 Pageable) 동적 정렬처리 게시물 조회/등록/수정/삭제 (현재 포스팅) REST API 설계 내용을 기반으로 게시물 조회, 등록, 수정, 삭제 기능을 구현했다. 사실 크게 어려운 게 없기 때문에 소스 만으로 충분히 설명이 될 것 같다. BoardController.java package com.company.helloBoard.domain.board.controller; import org.springframework.beans.factory.annotation.A..

자바에서 줄바꿈 \n 개행문자 치환하는 예제

개행문자(newLine) 개행문자는 컴퓨터에서 줄바꿈을 나타내는 제어 문자를 말하며, 줄바꿈문자라고도 부른다. 개행문자에는 크게 두가지 종류가 있다. LF (new Line Feed) 라인피드, 뉴라인으로 부르며, 커서를 한 칸 아래로 이동해 새로운 라인을 추가한다. \n 아스키코드 : 10 CR (Carriage Return) 캐리지리턴, 리턴으로 부르며, 커서를 맨 왼쪽으로 이동(시작 위치로 복귀)한다. 엔터키와 동일하다. \r 아스키코드 : 13 개행문자는 운영체제마다 다름 윈도우 : CRLF (\r\n) 맥 : CR (\r) 유닉스 : LF (\n) 자바 개행문자 사용하기 자바에서 개행을 처리할 때 \r\n 으로 처리하는 것이 가장 간단한 방법이긴 하지만, 개행문자는 운영체제별로 다르게 처리될 수..

스프링부트 Scheduler 정해진 시간마다 동작 시키는법

이번 프로젝트에서 정해진 시간마다 특정 동작을 수행해야 하는 기능이 있었다. Spring Boot에서 제공하는 Scheduler 기능을 이용해서 매우 간단하게 구현할 수 있다. 이번 포스팅에서는 특정 시간에 스케줄러를 통해 특정 동작을 구현하는 다양한 예제를 살펴볼 것이다. (쪼금 스압 주의)1. 스케줄러 활성화Scheduler는 기본적으로 Spring Boot에 포함되어 있어서 의존성을 별도로 추가할 필요는 없다. 메인 Application 클래스에 @EnableScheduling를 추가하여 Scheduler를 활성화한다.@SpringBootApplication @EnableScheduling // 스케줄러 활성화 public class SchedulerApplication { public static..

Spring Boot 내장 톰캣 제외시키는 방법

Spring Boot로 개발된 애플리케이션을 실행할 때, 내장 톰캣이 아니라 다른 서버로 배포해야 하는 경우가 있다. (예를 들어 내장톰캣이 아니라 Weblogic 서버로 배포해야 할 경우) 이런 경우 내장톰캣 관련된 설정을 모두 제거해야 한다. Spring Boot 애플리케이션에서 내장 톰캣서버를 제외시키는 방법은 간단하다. 내장톰캣 제외하기 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat pom.xml에서 으로 내장 톰캣을 제외하면 된다. 그런데 간혹 내장톰캣 제외 설정을 해도 안지워지는 경우가 있다. maven repository에서 내장톰캣을 사용하는 라이브러리들을 ..

Spring Boot에서 static 변수로 선언한 @Value 값이 NULL일 경우

Spring Boot에서는 초기화 과정에서 컴포넌트를 주입할 때, 애플리케이션에 대한 Key/Value 형태의 설정을 클래스 내 변수에 값을 넣어주는 @Value 어노테이션이 존재한다. 이러한 설정은 application.properties 설정 파일에서 다음과 같은 형식으로 관리할 수 있다.encrypt.key=1.0.2이러한 방식을 사용하여 다른 3rd party 서비스를 사용할 때 Access Key 또는 Secret Key 같은 설정을 유용하게 할 수 있다.static 변수에 대하여 @Value 사용하기@Component로 선언된 클래스에서 @Value으로 변수를 설정하여 설정파일에 선언한 값을 가져올 수 있다. 다만 static 변수에서 다음과 같이 @Value 을 사용한다면 잘못된 결과를 초래..

스프링부트 EnvironmentPostProcessor로 사용자 정의

이번 프로젝트에서 Spring Boot 애플리케이션 구동시 실행되는 기능을 만들어야 했다. EnvironmentPostProcessor 인터페이스를 활용하여 커스터마이징 환경으로 구현할 수 있었다. 이 인터페이스는 Environment 애플리케이션 컨텍스트가 올라가기 전에 애플리케이션을 사용자 정의할 수 있게 해주는 기능이다. 실제 예시를 살펴보자.사용자 정의 클래스 생성EnvironmentPostProcessor 인터페이스를 구현한 사용자 정의 클래스를 작성한다.import org.apache.commons.logging.Log; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.Environmen..