일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Immutable
- springboot
- 클린코드
- IOC
- beanfactory
- 토비의스프링
- ApplicationContext
- exception
- DispatcherServlet
- ORM
- java
- 메이븐
- String
- 토비의스프링3.1
- springwebmvc
- lambda
- 빌드툴
- FunctionalInterfaces
- DesignPattern
- 링킹
- Spring
- JPA
- 자바
- gradle
- Kotlin for Java Developers
- 컴퓨터시스템
- hibernate
- 링커
- 프록시
- AutoConfiguration
- Today
- Total
목록자바 (11)
엔지니어로 가는 길
Shallow copy 얕은 복사(shallow copy)는 객체가 아닌 객체를 참조하는 참조변수(객체의 주소)만 복사한다. fig3에서는 얕은 복사 방법 세 가지가 보인다. 1. 하나는 Object의 clone() 메소드 (Object의 clone() 메소드를 사용하기 위해서는 대상 클래스에서 clone() 메소드를 오버라이드 해야 하지만 얕은 복사는 객체가 복사되는 것이 아니므로 대상 클래스가 clone() 메소드를 오버라이드 하지 않아도 된다.) 2. 대입연산자 = 3. System의 arraycopy() 메소드(보다 효율적으로 얕은 복사 수행) 얕은 복사를 통해 복사되는 것은 참조변수(객체의 주소)뿐이므로 얕은 복사를 통해 만들어진 copy와 persons는 같은 Person 객체를 가리키고 있다..
영어로 된 문서를 읽을 때 자주 등장하는 단어가 있다. 단어의 뜻을 그대로 가져온 것이 아니라 자바에서 '이런 것을 이렇게 부르자'하고 정한 것이기 때문에 사전을 참고해도 잘 이해되지 않는다. 그런 단어 중에서 자주 등장하는 단어 몇 가지를 정리해둔다면 앞으로 문서를 읽고 이해하는데 큰 도움이 될 것이다. Expression Expression은 자바 인터프리터가 evaluate 하는 대상으로, evaluate의 결과 어떤 값이 나온다. Evaluate도 자주 등장하니 알아두는 게 좋다. 사전에 따르면 '평가하다' 정도인데 '풀다, 계산하다'로 생각하는 게 더 이해하기 수월할 것 같다. Expression은 변수, 연산자, 프리미티브 값, 메소드 호출, 다른 expression 등을 가질 수 있는데 그냥..
지난 글에서 프록시란 무엇인지 알아보았고, 간단한 프록시 예제를 하나 살펴보았다. 프록시(Proxy)란 무엇인지 자바 코드로 보자 프록시(Proxy)란 무엇인지 자바 코드로 보자 Proxy Proxy의 사전적 정의는 대리인이다. 자바에서 프록시는 타겟의 기능을 확장하거나 타깃에 대한 접근을 제어하기 위한 목적으로 사용하는 클래스를 말한다. 여기서는 기능을 확장하는 프록시 live-everyday.tistory.com 이번에는 지난 시간의 예제를 발전시켜 자바를 통해 다이나믹하게 프록시를 구현하는 방법을 살펴보도록 한다. '다이나믹하게'라는 뜻은 코드로 일일이 프록시를 만드는 것이 아니라 런타임에 프록시가 생성되는 것을 의미한다. 먼저 왜 다이나믹하게 프록시를 구현해야 하는지 살펴보자. 프록시 구현의 문제..
프록시 Proxy의 사전적 정의는 대리인이다. 자바에서 프록시는 타겟의 기능을 확장하거나 타깃에 대한 접근을 제어하기 위한 목적으로 사용하는 클래스를 말한다. 여기서는 기능을 확장하는 프록시의 예시를 보도록 한다. Hello라는 클래스의 메소드가 대문자로 변환된 문자열을 리턴하게 하고 싶다고 해보자. 이때 프록시를 이용하면 Hello의 메소드를 변경하지 않은 채로 ‘대문자로 변환’이라는 부가 기능을 추가할 수 있다. 여러 구현 방법이 있지만 지금은 프록시의 개념을 이해하는 것이 목적이므로 인터페이스를 통해 간단하게 구현하는 방법을 알아보자. 위와 같이 Hello라는 이름의 인터페이스를 만든다. HelloTarget이라는 클래스를 만들어 Hello를 구현한다. 다음으로 HelloUppercase라는 또 다..
String literal vs new String() str1을 String literal이라 말한다. str1과 str2는 어떤 차이가 있을까. 위의 그림대로 문자열을 만들어보자 이때 s3와 s4는 같은 곳을 가리키고 있다. String literal은 같은 문자열인 경우 메모리 전체에서 하나만 존재함을 알 수 있다. 하지만 s1과 s2를 보면 같은 문자열임에도 s3, s4가 가리키는 곳과 다른 곳을 가리키고 있고, 심지어 s1과 s2끼리도 서로 다른 곳을 가리키고 있다. 즉, new 연산자를 통해서 String 객체를 만들면 문자열이 같아도 매번 다른 공간에 문자열이 생기는 것임을 알 수 있다. 테스트해보자. 동일성과 동등성 동일할 때와 동등할 때 모두 '같다'라는 단어를 사용할 수 있지만 그 뜻이..
Facade Pattern(퍼사드 패턴) 퍼사드 패턴은 서브시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공한다. 퍼사드란 서브시스템을 더 쉽게 사용할 수 있도록 만드는 더 높은 수준의 인터페이스를 말한다. 퍼사드 패턴의 등장인물 및 역할은 다음과 같다. Facade: 클라이언트의 요청을 적절한 서브시스템 클래스에 위임한다. Subsystem classes: 서브시스템 기능을 구현한다. 서브시스템 클래스는 facade에 의해서만 사용된다. Client: Facade에게 특정 행동을 수행해달라고 요청한다. 온라인 쇼핑몰에서의 주문 시스템을 예로 들어보자. 현재의 상황에서 클라이언트는 서브시스템 클래스에 의해 구현된 서비스들과 다수의 상호작용을 해야하며, 서브시스템 클래스에 대한 정보를 알고 있어야..
Error java.lang.Error 클래스의 서브 클래스들이 해당된다. 에러는 시스템에 뭔가 비정상적인 상황이 발생했을 경우 사용된다. 그래서 주로 JVM에서 발생시킨다. 애플리케이션 코드는 에러를 잡으려고 하면 안 된다. 아무런 대응 방법이 없기 때문이다. Exception java.lang.Exception 클래스와 그 서브클래스들이 해당된다. 에러와 달리 애플리케이션 코드의 작업 중 예외상황이 발생했을 경우 사용된다. Exception 클래스는 체크 예외와 언체크 예외로 구분되는데, 전자는 RuntimeException을 상속하지 않은 것들이고, 후자는 상속한 클래스들을 말한다. Checked Exception(체크 예외) 일반적으로 예외라고 하면 Exception 클래스의 서브클래스 중에서 R..
JAVA SE 8 이후의 Annotations 1. Type Annotations and Pluggable Type Systems 자바8 이전에는 어노테이션이 declarations에만 적용될 수 있었다. 하지만 자바8부터 어노테이션이 type use에도 적용될 수 있다. 다시 말해, 타입을 사용하는 곳이면 어디든 어노테이션을 사용될 수 있다는 뜻이다. Class instance creation expression: Type cast: Implements clause: Thrown exception declaration: 이러한 형태의 어노테이션을 타입 어노테이션이라 부른다. 타입 어노테이션은 analysis of java code를 향상시키고 더 강한 type checking을 보장할 수 있다. 특징 ..
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html 이름이 없는 익명 클래스가 이름 있는 클래스보다 더 간결하지만 하나의 메소드만 갖는 클래스의 경우에는 익명 클래스조차 과하다. 람다 표현식을 이용하면 하나의 메소드만을 갖는 클래스의 객체를 익명 클래스보다 더 간결하고 분명하게 표현할 수 있다. 람다 표현식의 문법 -괄호로 속 콤마로 구분되는 형식 매개변수의 리스트 람다 표현식에서 매개변수의 데이터 타입을 생략할 수 있다. 또한 매개변수가 하나라면 괄호도 생략할 수 있다. -arrow token: -> -body: 단일 표현식이나 statement block 위와 같이 body가 단일 표현식으로 이루어진 경우 표현식을 계산..
출처: https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html 지역 클래스(Local Classes) 지역 클래스는 블록 안에 정의된 클래스를 말한다. 아래 이미지에서 EnglishGreeting은 지역 클래스이다. 꼭지 1. 지역 클래스의 선언 2. Enclosing class 멤버에 접근하기 (*Enclosing class란 지역 클래스를 포함하고 있는 클래스) 3. 지역 클래스와 내부 클래스의 유사성 1. 지역 클래스의 선언 지역 클래스는 표현식, statements, 블록 모두에서 정의할 수 있다. 예를 들어 메소드의 body나 for문이나 if문 안에서 지역 클래스를 정의할 수 있다. 2. Enclosing class의 멤버에..