본문 바로가기

JAVA

(11)
Checked Exception 과 Unchecked Exception Java에서 예외는 두 가지 주요 카테고리인 체크 예외와 언체크 예외로 나뉩니다. 체크 예외(Checked Exceptions) 체크 예외는 일반적으로 프로그램의 제어 범위를 벗어난 에러를 나타냅니다. 예를 들어, 코드가 읽으려는 파일이 존재하지 않는 경우, FileNotFoundException이라는 체크 예외가 발생합니다. Java는 컴파일 시점에서 체크 예외를 검증합니다. 이는 체크 예외를 발생시킬 수 있는 메소드를 작성할 때, throws 키워드를 사용해 예외를 선언하거나 try-catch 블록을 사용해 예외를 처리해야 한다는 것을 의미합니다. 다음은 체크 예외를 선언하는 예제입니다: private static void checkedExceptionWithThrows() throws FileNot..
AOP 용어 정리 - Join Point AOP 를 적용할 수 있는 모든 위치. 스프링의 경우에는 프록시 방식으로 사용하여, 메소드 실행 지점으로 제한 - Pointcut 어드바이스가 적용되어야하는 Joinpoint의 집합. - Target 어드바이스를 받는 객체 - Advice 특정 join point에서 Aspect에 의해 실행되는 기능 Around, Before, after 와 같은 다양한 종류의 Advice가 있음 - Aspect Advice와 Pointcut을 모듈화한 것 - Advisor 하나의 advice와 하나의 pointcut으로 구성 - Weaving 포인트컷으로 결정한 타켓의 조인 포인트에 어드바이스를 적용하는것
try-with-resource close를 통해서 직접 닫아줘야되는 resource를 사용하는 경우 try-with-resource를 사용해서 자동으로 close를 시켜줄 수 있다. 자원들은 AutoCloseable interface를 구현해야한다. 아래와 같이 여러개의 자원을 사용하는 코드를 작성할 수 있다. 이 때는 자원을 생성한 순서의 역순으로 close를 해준다. public class Main { public static void main(String[] args) throws Exception { try (TestResource testResource = new TestResource("1"); TestResource testResource2 = new TestResource("2")) { System.out.println..
sum 에 wrapper class를 쓰면? 0부터 Integer.MAX_VALUE까지 더한 결과를 구하는 프로그램을 만든다고 가정하자. 더한 결과를 저장하는 변수를 sum이라고 할 때, sum을 Long 으로 하는 것과 long으로 하는 것에는 차이가 난다. Long sum = 0L; 으로 선언하게 되면, sum의 값이 바뀔 때마다 새로운 객체가 생성되어 성능이 느려지게 된다. 실제로 아래 코드로 테스트를 해보니, Long의 경우는 6.2초 long의 경우는 0.79초로 long의 성능이 더 좋은 것을 확인할 수 있었다. public class Main { public static void main(String[] args) { long time1 = System.currentTimeMillis(); Long sum1 = 0L; for (long..
도메인 주도 설계 - 1부 동작하는 도메인 모델 만들기 도메인 : 사용자가 프로그램을 사용하는 대상 영역 모델 : 지식을 선택으로 단순화 하고 의식적으로 구좌한 형태 도메인 모델 : 다이어그램이 전달하고자 하는 아이디어 도메인 주도 설계에서의 모델의 유용성 1. 모델과 핵심 설계는 서로 영향을 주며 구체화된다. 2. 모델은 모든 팀 구성원이 사용하는 언어의 중추다. 3. 모델은 지식의 정수만을 뽑아낸 것이다. 소프트웨어의 본질 토크쇼 편집 예시 -> 재미있는 재촬영본을 사용하는 것 본질이었지만, 편집자는 코트 소매가 나왔기에 완벽하지 못하다고 판단하였다. 01 지식 탐구 1. 모델과 구현의 연계 2. 모델을 기반으로 하는 언어 정제 3. 풍부한 지식이 담긴 모델 개발 4. 모델의 정제 5. 브레인스토밍과 실험
Adapter Pattern 과 SLF4J 1. 어댑터 패턴 어댑터 패턴은 어떤 클래스의 인터페이스를 클라이언트에서 구하는 다른 인터페이스로 변환하는 것을 말한다. 일상 생활에서 예시를 들어보면, 돼지코라고 알려진 어댑터 플러그가 어탭터 패턴이 적용된 사례라고 볼 수 있다. 클라이언트(client)는 동그란 모양의 플러그이고, 일본의 11자 모양의 콘센트는 어댑티(adaptee)이다. 11자 모양의 콘센트를 적응시켜주는 돼지코가 어댑터(adapter)이다. 클래스 다이어그램으로 그려보면 위그림과 같다. 클라이언트는 타겟 인터페이스를 사용하여 어댑터의 request를 호출한다. 그러면 어탭티의 specificRequest가 호출되어서 request가 수행되게 된다. 이는 어댑티의 인터페이스를 타겟 인터페이스로 변환 시켜주어, 클라이언트가 어댑티를 ..
Log4j 알아보기 1. Overview 로깅이란 무엇일까? 로깅이란 프로그램에서 발생한 이벤트들을 기록하는 것을 말한다. 실행중인 프로그램에서 문제가 발생하였을 때, 로그를 이용해 문제의 원인을 찾고 해결할 수 있다. 코드에 log를 심어두는 방식은 디버거를 사용할 수 없을 때, 유용하게 사용될 수 있다. Java로 개발을 하면서 System.out.println 을 사용하여 디버깅을 해본 경험이 있을 것이다. 로깅을 할 때, System.out.println을 사용하지 않고, log4j, sfl4j, logback, log4j2와 같은 라이브러리에 구현된 logger를 사용하는 이유는 무엇일까? 바로 이들 logger가 제공해주는 기능들이 System.out.println 보다 더 유용하기 때문이다. 1996년 초 E...
Volatile Java Volatile 키워드를 사용하는 이유는? - 멀티 스레드 환경에서 변수의 visibility를 보장하기 위해서 사용한다. 멀티 스레드 환경에서 어플리케이션의 정상적인 동작을 보장하기 위해서는 2가지 요소가 필요하다. 1. Mutual Exclusion - 한 스레드만이 임계영역에서 실행된다. 2. Visibility - 한 스레드가 공유 데이터를 변경한 경우, 일관성을 유지하기 위해 다른 스레드에서도 변경된 데이터가 보인다. volatile 키워드를 사용하게 될 경우, mutula exclusion없이 두번째 요소인 visibility를 쉽게 보장할 수 있다. 참고문서 https://www.baeldung.com/java-volatile