일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- IOC
- 자바
- 토비의스프링
- 링킹
- DesignPattern
- Kotlin for Java Developers
- springboot
- beanfactory
- Immutable
- JPA
- 링커
- 프록시
- ORM
- 메이븐
- java
- 클린코드
- AutoConfiguration
- 토비의스프링3.1
- hibernate
- gradle
- ApplicationContext
- String
- 컴퓨터시스템
- lambda
- FunctionalInterfaces
- Spring
- 빌드툴
- DispatcherServlet
- exception
- springwebmvc
- Today
- Total
목록java (16)
엔지니어로 가는 길
최근에 지인에게 예외가 뭐냐는 질문을 받았다. 코드에서 예외를 다루는 건 익숙한데 예외에 대해 설명하려니 긴가민가한 부분이 있었다. ‘예외랑 에러랑 어떻게 다르더라? 예외는 이름에서 알 수 있듯 예외적인 상황과 관련이 있는데, 어디선가 예외도 정상 플로우라고 들었던 것 같은데 핸들링하고 있는 예외는 정상 플로우로 보는 거였나?’ 아래의 글에서 토비의 스프링을 읽으며 Checked exception과 Unchecked exception에 대해 간략히 정리한 적이 있는데, 이번에는 오라클 문서를 읽으며 예외가 무엇인지 기본 개념에 대해 정리해보려고 한다. JAVA Error와 Checked/Unchecked Exception Error java.lang.Error 클래스의 서브 클래스들이 해당된다. 에러는 ..
아래 두 개의 글에 이어 이번이 세 번째 String 관련 글인 것 같다. Java String으로 보는 동일성과 동등성 Java StringBuilder를 쓰는 이유 Java String은 왜 불변일까? 불변이기 때문에 얻을 수 있는 장점에 대해 알아보자. 장점 1. 안전 Immutable이기 때문에 안전하다. 몇 개의 예시를 살펴보자. 1. 여러 참조 변수가 같은 String 객체를 참조하고 있다고 하더라도 안전하다. String 객체를 누가 조작할 수가 없기 때문이다. 2. String 객체를 이리저리 전달할 때 원본 String 객체가 저장된 주소 자체를 넘겨도 안전하다. 전달받은 곳에서 원본 값을 직접 읽을 순 있으나 조작할 수는 없기 때문이다. 장점 2. 성능 및 효율 Immutable은 안전..
Immutable String은 immutable하다. Immutable이란 변하지 않는다는 뜻이다. 예시를 들어보자. 위와 같이 "Hello"를 담고 있는 str이라는 변수에 "Hello world"를 대입해주면 어떤 일이 벌어질까? "Hello"가 있던 공간에 " world"를 추가하는 것이 아니라 "Hello world"라는 새로운 문자열을 갖게 된다. 정확히는 str이 "Hello"가 있는 메모리 공간을 가리키던 상황에서 "Hello world"가 있는 메모리 공간을 가리키게 된다. (만약 위의 상황에서 String str2 = "Hello world"; 라는 코드를 추가한다면 이때 str2와 str1은 같은 곳을 가리키게 된다. 참고: Java String literal과 new String()..
Type Inference 자바 컴파일러가 타입을 추론하는 것을 Type Inference라고 한다. 컴파일러는 추론을 위해 method invocation과 그에 상응하는 declaration을 살펴본다. 추론 알고리즘은 인자의 타입을 결정하고, 가능한 경우에 결과가 할당되는 타입 또는 리턴되는 타입까지 결정한다. 추론 알고리즘은 모든 인자와 어울리는 선(공통 부모)에서 가장 구체적인 타입을 찾는다. 아래의 pick 메소드를 살펴보자. pick 메소드의 type 매개변수는 T이고 메소드의 매개변수 a1과 a2 모두 T이다. 하지만 pick을 호출할 때 첫 번째 인자로 String을 주었고 두 번째 인자로 ArrayList를 주었다. 이런 경우에 모든 인자와 어울리는 선(공통 부모)이란 Serializa..
출처: http://docs.oracle.com/javase/tutorial/java/annotations/ annotate add notes to (a text or diagram) giving explanation or comment. 어노테이션이란 메타데이터의 형식으로 프로그램에 대한 데이터(이는 프로그램의 일부는 아니다)를 제공한다. 어노테이션은 가리키는 코드의 동작에 직접적인 영향을 미치지는 않는다. 어노테이션의 용도 컴파일러을 위한 정보 제공 어노테이션은 에러를 잡아내거나 경고를 무시하기 위해 컴파일러에 의해 사용될 수 있다. 컴파일 타임, 개발 타임 처리 소프트웨어 도구는 코드, xml 파일 등을 생성하기 위해 어노테이션 정보를 이용할 수 있다. 런타임 처리 일부 어노테이션은 런타임에 사용될..
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html Method references 람다 표현식에서 하는 일이라고는 이미 존재하는 메소드를 호출하는 게 전부인 경우 Method references를 사용할 수 있다. 이는 말 그대로 (일반적인 람다 표현식의 문법을 따르는 것이 아니라) 그 메소드의 이름을 언급하는 것인데 람다 표현식을 사용한 것보다 간결하고 명확하다. Person이라는 클래스를 예로 들어보자. age라는 변수를 가지고 있고, compareTo는 두 개의 Person 객체를 인자로 받아 age를 비교하는 static 메소드이다. 세 개의 Person 객체를 만든 뒤 배열에 넣고 Arrays의 sort 메소드를 ..
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html standard functional interfaces는 java.util.function에 있는 인터페이스로 java 1.8부터 지원한다. Consumer는 standard functional interfaces 중 하나이다. Interface Consumer 하나의 인자를 받아 연산을 수행하지만 아무것도 리턴하지 않는다. 다른 대부분의 functional interfaces와 달리 side-effects를 기대하는 인터페이스..
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html 이름이 없는 익명 클래스가 이름 있는 클래스보다 더 간결하지만 하나의 메소드만 갖는 클래스의 경우에는 익명 클래스조차 과하다. 람다 표현식을 이용하면 하나의 메소드만을 갖는 클래스의 객체를 익명 클래스보다 더 간결하고 분명하게 표현할 수 있다. 람다 표현식의 문법 -괄호로 속 콤마로 구분되는 형식 매개변수의 리스트 람다 표현식에서 매개변수의 데이터 타입을 생략할 수 있다. 또한 매개변수가 하나라면 괄호도 생략할 수 있다. -arrow token: -> -body: 단일 표현식이나 statement block 위와 같이 body가 단일 표현식으로 이루어진 경우 표현식을 계산..
출처: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html 익명 클래스 - 익명 클래스를 사용하면 코드를 더 간결하게 만들 수 있다. - 익명 클래스는 정의되는 동시에 객체가 생성된다. - 이름이 없다는 점을 빼면 지역 클래스와 유사하다. (지역 클래스를 한 번만 사용하면 되는 경우라면 익명 클래스를 사용하라.) - 익명 클래스는 자신을 포함하는 외부 클래스(이하 enclosing class)의 멤버에 접근할 수 있다. (final 또는 유사 final로 선언된 변수에만 접근할 수 있다.) (지역 클래스에서도 final 변수 또는 유사 final로 선언된 변수에만 접근할 수 있는 것 같다.) - 중첩 클래스와 마찬가지로 익명..
출처: https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register JVM 런타임 메모리 영역 1. Program Counter(이하 PC) 2. JVM 스택 3. 힙 4. 메소드 영역 5. 런타임 상수 풀 6. 네이티브 메소드 스택 JVM 런타임 메모리 영역은 크게 두 가지로 그룹으로 나눌 수 있다. @스레드별로 갖는 영역: PC, JVM 스택, 네이티브 메소드 스택 이 영역의 데이터는 스레드가 시작할 때 초기화되고, 스레드가 완료될 때 제거된다. @모든 스레드가 공유하는 영역: 힙, 메소드 영역, 런타임 상수 풀 이 영역의 데이터는 JVM이 시작할 때 초기화되고, JVM이 종료될 때 제거된다. 1. ..