memostack
article thumbnail
Spring Boot에서 AOP 구현 (Aspect Oriented Programming)
Backend/Spring Boot 2021. 3. 11. 11:34

AOP 구현 AOP 개념은 아래 글 참고 2021.03.11 - [Spring] - Spring의 AOP 개념 (Aspect Oriented Programming) Spring의 AOP (Aspect Oriented Programming) AOP AOP는 Aspect Oriented Programming 의 약자로, 번역하면 관점 지향 프로그래밍이다. AOP는 주 비지니스 로직 앞, 뒤로 부가적인 기능을 추가하고 싶을때 사용하는데 예를들어, 로그처리, 보안처리, DB memostack.tistory.com 의존성 추가 org.springframework.boot spring-boot-starter-aop 서비스(비즈니스 로직) 구현 테스트를 위한 비즈니스 로직을 구현 AOP 구현에 집중하기 위해, 단순히..

article thumbnail
Spring의 AOP 개념 (Aspect Oriented Programming)
Backend/Spring 2021. 3. 11. 00:15

AOP AOP는 Aspect Oriented Programming의 약자로, 번역하면 관점 지향 프로그래밍이다. AOP는 주 비지니스 로직 앞, 뒤로 부가적인 기능을 추가하고 싶을때 사용하는데 예를들어, 로그처리, 보안처리, DB 트랜잭션 처리 등이 있다 관점을 횡단으로 바꿔서 바라보는 것을 횡단 관심 사항이라 하며, 부가적인 로직을 Cross Cutting Concern, 주 비즈니스 로직을 Core Concern 이라 한다. AOP를 사용하는 이유? 코드의 중복을 줄일 수 있다. 주 업무 로직과 부가적인 로직을 분리할 수 있다. Java로 AOP 구현 AOP는 디자인 패턴 중 프록시 패턴(Proxy Pattern)을 이용해서 구현할 수 있다. 스프링에서는 어노테이션으로 더 쉽게 구현할 수 있음 성능 ..

article thumbnail
Spring의 IoC 컨테이너 (Inversion of Control)
Backend/Spring 2021. 3. 10. 23:02

IoC (Inversion of Control) IoC는 Inversion of Control의 약자로 한국어로 번역하는 '제어의 반전' 이라는 뜻을 가짐 재사용 라이브러리의 흐름이 반대라고 말할 수 있음 내용을 살펴보기 전에 DI(Dependency Injection)을 알고 있으면 이해하기 쉽다. 2021.03.10 - [Spring] - Spring의 DI 개념 (Dependency Injection) Spring의 DI 개념 (Dependency Injection) 객체를 생성하는 2가지 방법 객체를 생성하는 방법에는 2가지가 방법이 있다. 필요한 곳에 직접 생성하는 방법 외부에서 미리 생성해두고 필요한 곳에 할당(주입)하는 방법 위 그림은 직접 객체 memostack.tistory.com 아래 ..

article thumbnail
Java - Collection과 Map의 종류(List, Set, Map)
Language/JAVA 2021. 3. 9. 22:21

Collection과 Map Java의 자료구조는 크게 Collection과 Map으로 나눌 수 있음 그리고, Collection은 List와 Set, Queue로 나눌 수 있음 본 글에서는 아래 자료구조에 대한 내용을 간단히 정리한다. List: ArrayList, LinkedList, Vector, Stack Set: HashSet, LinkedHashSet, TreeSet Queue: priorityQueue, ArrayDeque Map: HashMap, LinkedHashMap, Hashtable, TreeMap Collection - List 리스트는 순서를 가지고, 원소의 중복이 허용된다는 특징이 있음 ArrayList ArrayList는 배열을 이용하여 만든 리스트이다. 기본 크기는 10이지..

article thumbnail
Java - HashMap과 Hashtable의 차이
Language/JAVA 2021. 3. 8. 18:27

HashMap과 Hashtable 모두 map 자료구조다. 사용 방법도 거의 동일하지만, 차이점이 있음 // HashMap Map map = new HashMap(); map.put(1, "one"); map.put(2, "two"); System.out.println(map.get(1)); // one System.out.println(map.get(2)); // two // Hashtable Map table = new Hashtable(); table.put(1, "one"); table.put(2, "two"); System.out.println(table.get(1)); // one System.out.println(table.get(2)); // two HashMap HashMap은 동기화를 ..

article thumbnail
Java - String Pool에 대해서
Language/JAVA 2021. 3. 7. 15:49

String Pool String을 이용하여 문자열을 생성하는 방법은 2가지가 있다. 문자열 리터럴을 이용하여 생성 new 연산자를 통해 String 객체를 생성하는 방법 위 2개 방법 모두 Heap 영역에 데이터가 저장되는것은 동일하지만, 리터럴의 경우는 String Pool 이라는 곳에 생성된다. 리터럴 방식으로 문자열을 생성할 때, 만약 String Pool에 같은 문자열이 존재하면 새로 만들지 않고, 만들어진 문자열을 바라본다. 그래서, 아래와 같이 같은 문자열인 경우 동일한 주소를 바라보고 있다. String greet = "Hello"; String greet2 = "Hello"; System.out.println(System.identityHashCode(greet)); System.out...

article thumbnail
Java의 String과 StringBuilder, StringBuffer 비교
Language/JAVA 2021. 3. 7. 15:46

String String은 불변성(Imutable)을 가진 객체로 + 연산자를 통해 문자열을 생성하는 경우, 새로운 문자열을 반환한다. String greet = "Hello"; System.out.println(greet.hashCode()); greet += " World"; System.out.println(greet.hashCode()); 69609650 -862545276 + 연산 후 주소값이 달라짐. 즉, 가리키는 문자열이 달라짐 StringBuilder & StringBuffer StringBuilder와 StringBuffer는 String에 문자열을 추가하면 새로운 객체를 반환하는 단점을 보완하여 만들어진 클래스이다. StringBuilder와 StringBuffer는 버퍼(Buffer)..

article thumbnail
Java - 연산자의 종류 (증감/부호/산술/논리/비교/대입 연산자)
Language/JAVA 2021. 2. 3. 23:18

산술 연산자 +, -, *, /, %로 더하기, 빼기, 곱하기, 나누기, 나머지 몫 연산자로 나눠진다. 우리가 아는 사칙연산을 생각하면 된다. +: 더하기 -: 빼기 *: 곱하기 /: 나누기 %: 나눈 후 나머지 몫 int num = 15; System.out.println(num + 2); // 17 System.out.println(num - 2); // 3 System.out.println(num * 2); // 30 System.out.println(num / 2); // 7.5 System.out.println(num % 4); // 15/4 의 나머지는 3 17 13 30 7 3 증감 연산자 ++: 항에 1을 더한다. --: 항에 1을 뺀다. 증가/감소 연산자 위치에 따라 다른 의미를 가지는데..

article thumbnail
Java - 형 변환 (Type Conversion)
Language/JAVA 2021. 2. 3. 22:38

형 변환 변수와 값이 서로 다른 자료형의 값을 가지는 경우, 형 변환이 발생함 형 변환에는 2가지가 있다 묵시적 형 변환 Implicit type conversion 명시적 형 변환 Explicit type conversion 묵시적 형 변환 Implicit type conversion 프로그래머가 따로 명시할 필요 없이 알아서 형 변환이 일어난다. 하지만, 아래와 같은 조건이 존재한다. 1. 작은 수에서 큰 수로 형 변환이 일어남 (예시) short (2byte) -> int (4byte) int (4byte) -> long (8byte) // 작은 수에서 큰 수로 형 변환 byte byteNum = 1; int intNum = byteNum; // 형 변환 발생 System.out.println(by..

article thumbnail
Java - 자바의 자료형 Data Type (Primitive Type, Reference Type)
Language/JAVA 2021. 2. 2. 21:03

자바의 자료형 Java의 자료형에는 기본형(Primitive Type), 참조형(Reference Type) 2가지가 존재한다. 자료형은 다른 말로 Data Type이라 부르기도 함 기본형 Primitive Type 자바에서 기본적으로 제공해주는 기본 자료형으로 primitive type이라 함 example: int, double, float, char 등등 기본형 데이터 타입은 변수에 값이 직접 저장되어 스택(stack) 영역에 저장되어 있다 기본 자료형의 종류와 크기 1바이트(btye)는 8비트(bit)이다 public class Main { public static void main(String[] args) { // 정수형 byte bNum = 1; // 1byte short shortNum =..

article thumbnail
Java - 문자 자료형과 아스키코드, 유니코드(UTF-8, UTF-16)
Language/JAVA 2021. 2. 2. 20:59

char 문자 자료형 char 타입은 데이터를 저장할 때 비트의 조합으로 저장이 된다. 문자에는 각각 코드 값이 부여되어 있다. 예를 들어서, A는 65, B는 66... 아스키코드와 유니코드 문자를 표현할 때 아스키코드와 유니코드를 사용한다. 아스키(ASCII) 코드 1바이트(8bit)로 영문자, 숫자, 특수문자 등을 표현함 유니코드 영문자, 숫자, 특수문자 뿐만 아니라 한글, 한자와 같이 복잡한 언어를 표현한다. 대표적으로는 UTF-8, UTF-16이 있다 public class Main { public static void main(String[] args) { // 아스키 코드 & 유니코드 System.out.println((char) 65); // A (아스키코드) System.out.print..

article thumbnail
Java - 변수 선언 및 변수 명명 규칙
Language/JAVA 2021. 2. 2. 20:15

변수 고정되어 있지 않고, 변할 수 있는 수를 뜻 함 프로그래밍에서도 마찬가지로 정해지지 않은 값으로 사용됨 실행 도중에 계속해서 바뀔 수 있음 또한 변수는 데이터를 저장하기 위해 사용됨 변수 선언 및 값 할당 Java에서는 변수의 자료형에 맞는 타입을 사용해야 함 타입 변수; 또는 타입 변수 = 값; 과 같은 형태로 선언 public class Main { public static void main(String[] args) { // 1. 변수 선언 int number; // 변수 선언 number = 1; // 변수에 값 할당 System.out.println(number); // 2. 변수 선언 & 값 할당 int age = 29; System.out.println(age); // 3. 동시에 여러..

article thumbnail
Java - Hello World 콘솔에 출력하기
Language/JAVA 2021. 2. 2. 19:48

콘솔 출력하기 Java에서는 콘솔을 출력할 때 System.out.println() 메소드를 사용한다. 문자열을 표현할 때는 쌍 따옴표("")를 사용한다. 코드의 맨 마지막에는 세미콜론(;)을 사용한다. public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } 윈도우 인텔리제이 기준으로 Ctrl + Shift + F10을 누르면 실행된다. 맥 인텔리제이는 command + Shift + r을 누르면 실행됨 자바의 실행 순서 1. 프로그래머가 코드를 작성한다. 2. 컴파일한다. (컴파일을 하면, 바이트코드가 생성됨, HelloWorld.java -> HelloWorld.c..

article thumbnail
SpringBoot, Junit5에서 REST API(Controller) 테스트
Backend/Spring Boot 2021. 1. 15. 12:06

REST API 테스트 Rest API를 테스트할 때는 @WebMvcTest 어노테이션을 사용한다. MockMvc를 생성할때는 MockMvcBuilders를 사용하여 생성한다. 다른 방법으로 MockMvcBuilders를 사용하지 않고, MockMvc에 @Autowired를 사용하여 자동으로 생성하여 주입할 수 있다. @ExtendWith(SpringExtension.class) @WebMvcTest(MemberController.class) @DisplayName("MemberController 테스트") class MemberControllerTest { private MockMvc mvc; @MockBean private MemberService memberService; @BeforeEach pu..

article thumbnail
SpringBoot, Junit5에서 Service 테스트
Backend/Spring Boot 2021. 1. 13. 22:17

서비스 작성 MemberService.java 생성자 주입을 통해, MemberRepository와 BCryptPasswordEncoder를 주입한다. BCryptPasswordEncoder는 시큐리티에 Bean을 생성했다. (아래 펼쳐서 확인) 더보기 @Configuration @EnableWebSecurity @EnableGlobalAuthentication public class SecurityConfig extends WebSecurityConfigurerAdapter { /** * 비밀번호 암호화 인코딩 방식 정의 * * @return BCryptPasswordEncoder BCrypt 단방향 암호화 */ @Bean public BCryptPasswordEncoder passwordEncoder..

Mac OS에서 JDK 11 설치 (adoptopenjdk11)
Language/JAVA 2020. 10. 30. 23:02

Homebrew를 사용하면, openjdk를 설치하는 건 굉장히 쉽다. jdk 뿐만 아니라 다른 패키지 설치하거나 삭제할때도 매우 편리함 JDK 11 설치 (adoptopenjdk11) 본 글에서는 adoptopenjdk11을 설치한다. $ brew cask install adoptopenjdk11 ==> Downloading https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.9%2B11.1/OpenJDK11U-jdk_x64_mac_hotspot_11.0.9_11.pkg ...중략... install-time: 1604066415 🍺 adoptopenjdk11 was successfully installed! 설치 ..

article thumbnail
CodeUp 1040번 - 정수 1개 입력받아 부호 바꿔 출력하기 (Java 풀이)
Algorithm/CodeUp 2020. 10. 25. 20:55

문제 원문: codeup.kr/problem.php?id=1040 [기초-산술연산] 정수 1개 입력받아 부호 바꿔 출력하기(설명) C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 codeup.kr 입력된 정수의 부호를 바꿔 출력해보자. 단, -2147483647 ~ +2147483647 범위의 정수가 입력된다. 참고 단항 연산자인 -(negative)를 변수 앞에 붙이면 부호가 반대로 바뀌어 계산된다. 예시 int a; scanf("%d", &a); printf("%d", -a); 입력 정수 1개가 입력된다. -1 출력 부호를 바꿔 출력한다. 1 Java 풀..

article thumbnail
CodeUp 1039번 - 정수 2개 입력받아 합 출력하기2 (Java 풀이)
Algorithm/CodeUp 2020. 10. 25. 12:50

문제 원문: codeup.kr/problem.php?id=1039 [기초-산술연산] 정수 2개 입력받아 합 출력하기2(설명) C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 codeup.kr 정수 2개를 입력받아 합을 출력해보자. 단, 입력되는 정수는 -2147483648 ~ +2147483648 이다. 참고 + 연산자를 사용하면 된다. 단, 계산된 결과가 int 형으로 저장할 수 있는 범위를 넘어갈 수 있기 때문에 다른 데이터형을 사용해야 한다. 주의 int 데이터형은 %d로 입출력하고, long long int 데이터형은 %lld로 입출력한다. 입력 2개..

article thumbnail
CodeUp 1038번 - 정수 2개 입력받아 합 출력하기1 (Java 풀이)
Algorithm/CodeUp 2020. 10. 24. 14:46

문제 원문: codeup.kr/problem.php?id=1038 [기초-산술연산] 정수 2개 입력받아 합 출력하기1(설명) C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 codeup.kr 정수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자. (단, 입력되는 정수는 -1073741824 ~ 1073741824 이다.) 입력 2개의 정수가 공백으로 구분되어 입력된다. ** 주의 : 계산의 결과가 int 범위를 넘어가는지를 잘 생각해 보아야 한다. 123 -123 출력 두 정수의 합을 출력한다. 0 Java 풀기 주어지는 정수의 범위가 int형을 넘기 때..

article thumbnail
CodeUp 1037번 - 정수 입력받아 아스키 문자로 출력하기 (Java 풀이)
Algorithm/CodeUp 2020. 10. 23. 22:31

문제 원문: codeup.kr/problem.php?id=1037 [기초-출력변환] 정수 입력받아 아스키 문자로 출력하기 C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 codeup.kr 10진 정수 1개를 입력받아 아스키 문자로 출력해보자. 단, 0 ~ 255 범위의 정수만 입력된다. 입력 10진 정수 1개(0 ~ 255 범위)가 입력된다. 65 출력 아스키코드 값을 문자로 출력한다. A Java 풀기 1036번 문제와 반대로 아스키코드값을 입력받아, 문자로 출력한다. 단순히 char형으로 타입 캐스팅을 해주면 된다. import java.io.Buffer..