본문 바로가기

프로그래밍

(91)
[Java] Stream Stream이란 Stream은 자바 8에서 추가된 컬렉션, 배열, I/O 자원 등의 데이터 소스를 처리 방법으로, 데이터의 흐름을 추상화하여 다양한 처리를 지원한다. Stream은 데이터 소스를 변경하지 않기 때문에 Stream으로 처리한 결과는 원본 데이터에 영향을 미치지 않는다. Stream은 지연(lazy)처리를 지원하기 때문에 Stream으로 처리한 데이터는 실제로 필요할 때 까지 계산되지 않고 필요한 시점에서 계산된다. 이러한 Stream을 사용했을 때 얻을 수 있는 가장 큰 장점은 간결하고 가독성이 좋은 코드로 작성이 가능하다는 점이다. int[] numbers = {1, 2, 3, 4, 5}; int[] result = new int[numbers.length]; int index = 0; ..
[Spring] AOP AOP(Aspect Oriented Programming)란 AOP(Aspect Oriented Programming)는 OOP(Object Oriented Programming)에서 발생하는 문제 중 하나인, 관심사의 분리를 해결해주는 프로그래밍 패러다임이다. 관심사의 분리란, 비즈니스 로직 외에 로깅, 보안, 트랜잭션과 같은 부가적인 기능이 필요할 때 이를 모든 메소드마다 일일이 추가하게 되면 코드가 중복되고 유지보수성이 떨어지기 때문에, 부가적인 기능들을 한 곳에서 관리하고 필요한 메소드들에 일괄적으로 적용하는 것을 얘기한다. 위 그림에서 Class A, Class B, Class C는 저마다 부가적인 로직(색깔 블록)이 중복되고 있다. 이때 중복되는 소스코드으로 인해 소스코드가 비대해 질 뿐만 아..
[Spring] @Valid @Validated와 유효성 검사 Annotation @Valid @Validated란 @Valid와 @Validated는 서버 사이드에서 유효성 검사를 하기 위해 자바 및 스프링에서 제공하는 어노테이션이다. @Valid는 javax.validation.constraints 에서 지원하는 어노테이션으로 valid조건들을 검증하고, 유효성 검사에 부합하지 않는 문제 발생 시MethodArgumentNotValidException를 발생시킨다. @Validated는 스프링에서 지원하는 어노테이션 기능으로 @Valid와는 몇가지 차이점이 있다. 먼저, 컨트롤러(핸들러)계층에서만 동작하는 @Valid와는 달리 @Validated는 서비스등 컨트롤러뿐만 아니라 다른 계층에서도 유효성 검사를 할 수 있게끔 해준다. (@Valid는 핸들러 어탭터 처리과정인 Argume..
[Java] toString()과 String.valueOf() 차이점 toString()과 String.valueOf()는 주로 Object값을 String형으로 형변환할 때 주로 사용하는 메소드들이다. 차이점 두 메소드의 차이점은 바로 null값에 따른 NullPointException 발생의 유무이다. toString() : null 값을 형 변환 시 NullPointerException(NPE)이 발생 / Object의 값이 String이 아니여도 출력 String.valueOf() : 파라미터로 null이 오면 "null"이라는 문자열을 출력 코드 예시 public static void main(String args[]) { Object obj = null; System.out.println(obj.toString()); // NullPointerException ..
[Java] 배열 자르기 배열 자르기 오늘은 자바에서 배열이 하나 주어졌을 때 시작 인덱스와 마지막 인덱스 범위만큼 배열을 자르는 방법을 소개하고자 한다. 예를 들어 1부터 10까지 값을 가지는 배열에서 시작 인덱스를 3으로, 마지막 인덱스를 7로 주어 다음과 같은 결과를 얻고자 한다. 기존 배열 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 시작 인덱스 : 3 마지막 인덱스 : 7 특정 범위의 배열 : [4, 5, 6, 7] 1. System클래스의 arraycopy 메소드 System 클래스에서 제공하는 arraycopy() 메소드를 활용하여 특정 위치부터 특정 개수만큼 새로운 배열에 값을 할당할 수 있다. System.arraycopy(A, B, C, D, E); 매개변수 A : 원본 배열 B : 원본 배열에..
[Git] commit목록에서 workspace.xml 파일 제거하기 intellij와 github를 연동하여 프로젝트를 진행하던 중 commit을 할 때마다 workspace.xml파일이 함께 Changes 목록에 올라와 workspace.xml파일을 gitignore에 추가해야 할 일이 생겼다. 하지만 workspace.xml파일이 이미 깃허브 레파지토리에 올라가 있는 상황이라 gitignore에 추가하여도 자꾸만 올라가는 문제가 발생하였다. 해결방법을 찾아본 결과 git bash를 이용하여 작업하여 문제를 해결할 수 있었다. 해결 1. 깃허브와 연동되어있는 프로젝트 디렉토리에 접근한다. (.git파일이 있는 폴더) 2. 폴더 내부에서 마우스우클릭하여 git bash를 킨다. 3. git Bash Here 클릭 4. 아래의 커맨드 입력. mv .idea ../.idea..
[JavaScript] split() / join() split() 이란 문자열을 특정 구분자로 나누어 배열에 저장하는 메소드 문법 string.split( separator, limit ); 인자로 separator(구분자)와 limit을 받는다. limit은 최대 분할 개수를 의미하며 생략가능하다.(limit 값을 정하지 않으면 전체를 다 분할한다.) 코드 예제1 // str변수에 'abcd' 문자열을 넣어준다. let str = 'abcd'; // strArr변수에 위에서 생성했던 문자열을 특정 기호(기호를 쓰지 않을 경우 문자하나씩)를 기준으로 나누어 배열형태로 저장해준다. let strArr = str.split(''); 결과 strArr = ['a', 'b', 'c', 'd']; 코드 예제2 // str변수에 'Hello World !!' 문자열..
[Spring] 예외처리 (@ExceptionHandler, @ControllerAdvice) 프로그래밍을 하며 예외처리를 하기 위해서 매번 try-catch를 사용하게 되면 코드가 지저분해지고, 메소드마다 반복적으로 사용하기 때문에 중복, 불편함을 느낄 수 있다. 대신 Spring MVC에서 제공하는 @ExceptionHandler, @ControllerAdvice를 사용하여 일괄적으로 예외처리를 한다면 이러한 불편함을 해결할 수있다. @ExceptionHandler @ExceptionHandler란 @Controller, @RestController 어노테이션이 적용 된 빈에서 발생하는 예외를 캐치하여 하나의 메소드에서 처리할 수 있도록 해주는 어노테이션이다. 즉, 특정 Controller 범위에서 발생하는 예외처리를 전역적으로 처리할 수 있게 해준다. 코드 예제) @Controller pub..