본문 바로가기

전체 글

(47)
AOP와 Spring AOP AOP (Aspect Oriented Programming)란 AOP는 관점 지향 프로그래밍을 의미한다. 처음 이 단어를 접하면 객체지향(OOP), 절차지향(PP)과 완전히 다른 새로운 개념인지 의문이 들 수 있으나 AOP는 기본적으로 OOP 환경에서만 의미있는 개념이다. 다시 말해 AOP는 OOP를 보완하는 프로그래밍 기법이라고 할 수 있다.이런 AOP에 대한 정의는 각 기업이나 사이트마다 조금씩 다른데 가장 대표적인 정의는 다음과 같다. AOP는 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. 하지만 위 내용만으로는 AOP가 구체적으로 어떤 것인지 와닿지 않는다. AOP를 보다 자세히 이해하려면 다음과 같은 개념을 알..
동일성(identity)과 동등성(equality) 동일성과 동등성의 원활한 설명을 위해 아래와 같은 클래스가 있다고 가정한다. class User { private int userId; private String email; public User(int userId, String email) { this.userId = userId; this.email = email; }}  동일성(identity) 이란 동일성은 두 객체가 동일한 메모리 주소를 가리키는지를 의미한다. Java에서는 == 연산자를 사용하여 동일성을 비교한다.User user1 = new User(1, “test@test.com”);User user2 = user1;System.out.println(user1 == user2); // out..
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) 얕은 복사(Shallow Copy) 란 다음과 같은 Java 코드를 보자int[] arr1 = {1,2,3};int[] arr2 = arr1; arr2[0] = 10;System.out.println(arr1[0]); // output : 10System.out.println(arr2[0]); // output : 10arr1[1] = 9;System.out.println(arr1[1]); // output : 9System.out.println(arr2[1]); // output : 9 위 코드에서는 분명 arr2의 0번째 데이터를 10으로 변경했는데 arr2만 아니라 arr1의 0번째 데이터도 10으로 변경된 것을 볼 수 있다. 또한 arr1의 1번째 데이터를 9로 변경했는데 arr2의 1번..
String / StringBuilder / StringBuffer 이번 포스트를 보기 앞서 이전 포스트를 보고 오시기 바랍니다.https://jaystorage.tistory.com/20 String과 String Constant Pool들어가기 앞서 String을 보다 자세히 이해하기 위해서는 JVM 구조를 알고 있는 것이 좋다. JVM에 대한 자세한 내용을 알고 싶다면 https://jaystorage.tistory.com/8 을 참고하자 String 이란 Java에서 String은 문jaystorage.tistory.com  String 과 StringBuilder, StringBuffer 의 차이점 String과 (StringBuilder, StringBuffer)는 문자열을 다루는 클래스라는 점에서 공통점을 가지고 있지만 String은 불변성(immutable..
BigDecimal BigDecimal 이란 BigDecimal은 Java에서 고정 소수점 연산을 정확하게 수행하기 위해 사용되는 클래스를 의미한다. double이나 float과 같은 부동 소수점 타입은 매우 큰 숫자나 매우 작은 숫자를 처리할 수 있지만 정확도가 떨어질 수 있다. 이러한 이유로 금융 계산과 같이 정확도가 중요한 경우 부동 소수점 타입을 사용해 연산을 처리하는 것은 적합하지 않다. 이때 BigDecimal을 사용하면 소수점 이하의 숫자도 정확하게 표현할 수 있다.   float과 double의 문제점 아래 코드를 보자일반적으로 우리는 연산의 결과가 0.3이 나오길 기대하지만 실제로는 0.30000000000000004 라는 이상한 값이 도출된다.double a = 0.1;double b = 0.2;Syste..
String과 String Constant Pool 들어가기 앞서 String을 보다 자세히 이해하기 위해서는 JVM 구조를 알고 있는 것이 좋다. JVM에 대한 자세한 내용을 알고 싶다면 https://jaystorage.tistory.com/8 을 참고하자 String 이란 Java에서 String은 문자열을 나타내는 객체이다. C/C++에서는 문자열이 단순히 char의 배열인데 반해, Java에서의 문자열은 java.lang안에 있는 String 클래스의 객체를 의미한다. 그렇기 때문에 String 은 int 와 char 와 같은 기본형(primitive type)이 아닌 참조형(reference type) 변수로 분류된다. (String의 첫 글자가 소문자가 아닌 대문자로 시작하는 이유가 이 때문이다.) Java의 String 은 불변(immuta..
상수(Constant)와 리터럴(Literal) 상수(Constant) 란 상수란 한 번 값을 할당하면 프로그램 실행 도중 그 값이 변경되지 않는 변수를 의미한다. Java 에서는 상수를 정의하기 위해서는 final 키워드를 변수 앞에 붙여 사용한다. 정적 상수를 선언할 때는 static final 키워드를 사용하며 대문자로 작성하고 공백은 ‘_’ 로 표시한다. 인스턴스 상수를 선언할 때는 final 키워드를 사용하며 일반 변수 처럼 카멜 케이스로 작성한다. 이러한 상수를 초기화 하는 방법은 다음과 같다. 1. 선언시 초기화 public static final int MAX_COUNT = 100; public static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mydatabase"; 2. ..
SL4J와 Logback을 이용한 Logging Logging 이란 로깅이란 정보를 제공하는 일련의 기록인 로그(Log)를 생성하도록 시스템을 작성하는 활동을 의미한다. 보다 쉽게 설명하면 프로그램 동작 시 발생하는 모든 일을 기록하는 행위를 로깅이라고 할 수 있다. 이러한 로깅은 주로 프로그램의 동작 상태를 기록하여 어플리케이션을 운영하는 도중에 문제가 발생했을 때 해당 문제에 대한 원인을 분석하기 위해 사용된다. 자바에서는 System.out.println() 메소드를 사용해 원하는 내용을 출력할 수 있긴 하나 해당 메소드는 콘솔에서만 내용을 출력할 수 있다. 따라서 일반적으로 로깅을 할 때는 log4j나 logback과 같은 로깅 라이브러리를 사용해 로그 파일을 생성하는 방법을 사용한다. Log Level 일반적으로 로깅 라이브러리를 사용하여 로..