개발/Spring

    Java 8의 새로운 것들, 변경된 것들.

    람다 표현식 함수형 인터페이스 스트림 옵셔널 인터페이스의 기본 메소드 날짜 관련 클래스들 추가 병렬 배열 정렬 StringJoiner 추가 Oprional 이라는 단어는 우리 나라말로 선택적인 이라는 말 선택적으로 뭔가를 처리할 때 사용한다는 것을 예상할 수 있다. Opeional은 함수형언어인 Haskell과 Scala에서 제공하는 기능을 따온 것이다. 객체를 편리하게 처리하기 위해서 만든 클래스이다. java.util 패키지에 선언되어 있다. public final class Optional extends Object Object 클래스를 확장했고 final클래스로 선언되어 있으며 Generic한 클래스이다 final로 선언되어 있는게 무슨 의미 일까? final 변수는 변경 불가능하지만 ,final..

    자바 Java 제네릭 Generic

    JDK 1.5에 처음 도입됨 타입 형 변환에서 발생할 수 있는 문제점을 사전에 없애기 위해서. 자바에서는 여러 타입들이 존재하기 때문에 형 변환을 하면 예외가 발생할 수 있다. 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법 다양한 타입을 다루는 객체들을 다루는 메소드나 컬렉션 클래스에서 컴파일 시의 타입 체크를 해주는 기능 타입 형 변환에서 발생할 수 있는 문제점을 사전에 없애기 위해 만들어 졌음. 여기서 사전은 컴파일 할 떄 점검할 수 있다는 의미이다. 컴파일 시점에서 잘못된 타입인 것을 알기 위해서 제너릭을 사용하지 않을 경우에 발생하는 문제점 : 제너릭 타입 이름 정하기 제네릭 타입을 선언할 때에는 클래스 선언시 꺽쇠에 들어가는 기본 규칙이 있다. E : 요소 K : 키 N : 숫자 ..

    자바 I/O

    일반적인 웹 개발을 하면서 IO를 다룰 일은 많지 않지만 자바 개발을 계속 하다보면 언젠간 IO를 다룰 일이 생긴다. 파일을 읽거나 저장할 일이 있을 때 다른 서버나 디바이스로 보낼일 이 있을 때 I는 Input, O는 Output의 약자로, 입력과 출력을 통칭 하는 언어로 IO라고 부른다. JVM기준으로 읽을 때에는 Input을 파일로 쓰거나 외부로 전송할 대에는 Output이라는 용어를 사용한다. Input과 Output은 JVM 기준이라는 것을 꼭 기억해두자!(알아두면 헷갈일이 거의 없다) 초기 단계의 자바에서는 이러한 IO를 처리하기 위해서 java.io 패키지에 있는 클래스만 제공했다. 이 패키지에서는 바이트 기반의 데이터를 처리하기 위해서 여러 종류의 스트립이라는 클래스를 제공한다. 읽는 작업..

    가비지 컬렉터

    가비지 컬렉션(Garbage Collection, 이하 GC)에 대해 잘 알고 있을수록 실력이 좋은 Java 개발자라고 생각합니다. GC 과정에 관심을 가질 정도라면 규모가 일정 이상인 애플리케이션을 제작해 본 경험이 있을 것입니다. 또, 어떤 GC 알고리즘을 선택할 것인지 고민할 정도면 스스로 제작한 애플리케이션의 특징을 정확히 이해하고 있다고 볼 수 있습니다. 이러한 판단 기준이 보편적이지는 않지만, GC에 대한 이해는 훌륭한 Java 개발자가 되기 위한 필수 조건이라는 데에는 별다른 이견이 없을 것입니다. 가비지 컬렉션 과정 GC에 대해서 알아보기 전에 알아야 할 용어가 있다. Stop-The-World이다. GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. GC를 실행하는 쓰레드를..

    java.lang 패키지

    java.lang 패키지는 아주 특별한 패키지다. 자바 패키지 중에서 유일하게 import를 하지 않아도 사용할 수 있기 때문이다. 그 만큼 자바에서 꼭 필요한 여러 기능들을 제공한다. 크게 인터페이스, 클래스 예외클래스 등은 다음과 분류할 수 있다. 언어관련 기본 문자열 관련 기본 자료형 및 숫자 관련 쓰레드 관련 예외 관련 런타임 관련 CharSequence, String, StringBuffer, StringBuilder, Boolean, Byte, Character, Double , Float, Integer, Long, Math, Number, Short, Runnable, Thread, ThreadGroup, ThreadLocal, Throwable, Exception OutOfMemoryEr..

    JVM이란?

    JVM의 정의 자바 가상 머신(영어: Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다. (가상 머신 : 물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어적으로 구현한 컴퓨터 ) 특징 Java와 OS사이에서 중개자 역할을 하며, OS에 구애받지 않고 재사용 가능하게 해준다. 그리고 가장 중요한 GC(사용하고 남아 있는 전혀 필요없는 객체들을 정리)를 수행한다. JVM의 구조 Runtime Data Area JVM이 OS위에서 실행되면서 할당받은 메모리 영역. 구성요소 Stack : 스택 프레임이라는 구조체를 저장하는 스택. 스레드들이 독립적으로 갖고 있는 공간. Stack Frame : JVM내에서 {} 중괄호가 지삭될 때 마다 하나의 스택 프레임이 생성되고, ..

    Hot Spot JVM이란?

    자바에서는 클라이언트, 서버 두가지 컴파일러를 제공한다. 역사적인 관점에서 살펴보면 예전에는 CPU의 많은 코어를 사용할 수 없었다. 십년 전만하더라도 대부분 코어수는 하나였다. CPU코어가 하나뿐인 사용자를 위해 만들어진 것이 HotSpot 클라이언트 컴파일러이다. 이 컴파일러는 애플리케이션의 시작 시간을 빠르게 하고, 적은 메모리를 점유하도록 한다. 그리고 코어가 많은 장비에서 애플리케이션을 돌리기 위해서 만들어진 것이 HotSpot 서버 컴파일러라고 생각하면 되며, 이 컴파일러는 애플리케이션 수행 속도에 초점이 맞추어져 있다. 이 컴파일러의 주요 특징은 애플리케이션 시작 시작을 빠르게 하고 적은 메모리를 점유하도록 하는 것이다. 그리고 코어가 많은 장비에서 애플리케이션을 돌리기 위해 만들어진 것이 ..

    JIT란?

    JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두 가지가 있는데, 인터프리트 방식과 정적 컴파일 방식으로 나눌 수 있다. 이 중 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하며, 반면 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역한다. (정적 동적) 인터프리터 방식은 프로그램을 실행할 때마다 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 수행한다. 간편하기는 하지만 성능이 매우 느릴 수 밖에 없다.바이트 코드를 읽어 기계어를 생성 하는데, 코드가 실행..

    자바(JDK)의 버전별 차이 JDK 1.4

    JDK 1.4에서는 많은 라이브러리들이 추가되었다. JSR(자바 커뮤니티 프로세스)라는 절차에 따라서 개발된 첫번째 릴리즈이기도 하다 assert 예약어 추가 Perl언어의 정규 표현식을 따르는 정규 표현식 추가 exception chaning이라는 것을 통하여 하위 레벨의 예외의 캡술화가 가능해짐 IPv6지원 시작 NIO라는 NON-BLOCKING 추가 각종 로그를 처리하기 위한 Logging API 추가 JPEG, PNG같은 이미지를 읽고 쓰기 위한 image I/O추가 통합 XML파서와 JAXP라는 XSLT프로세서 추가 JCE, JSSE, JAAS와 같은 통합 보안 및 cyptography extensions추가 Java Web Start 추가(1.3에서 처음 소개) 각종 설정 값들을 저장하고 읽는..

    자바(JDK)의 버전별 차이 (JDK 1.0 ~ 1.2)

    현업에서 JDK (1.0~1.3)으로 운영중인 시스템은 찾아보기 매우 어려울 것이다. 그래서 1.3까지는 간단하게 살펴보자 JDK 1.0 가장 최초의 버전 그 후에 나온 마이너 버전은 JDK 1.0.2 버전 -> 최초의 안정 버전 JDK 1.1에서 추가 된 것들 AWT의 이벤트 모델의 확장 및 변경 내부 클래스(inner class)의 추가 JavaBeans, JDBC, RMI등 추가 (AWT : Abstract Window Tookit의 약자, 자바를 이용하여 UI를 구성할 때 사용되는 기반 기술.) (JDBC : Java Database Connectivity 자바에서 저장소에 데이터를 담기 위한 API) (RMI : Remote Method Invocation의 약자로 리모트에 있는 JVM에 있는 ..