본문 바로가기

Java9

[Java] Java SE, Java EE, Java ME 자바 배포판 Java SE, Java EE, Java ME 차이 Java SE(Standard Edition) 자바 스탠다드 에디션은 가장 보편적으로 쓰이는 자바 API 집합체(패키지)이다. Java SE는 Java Software Development Kit(SDK)으로 구현된다. 대체로 처음에 자바개발에 입문할 때 접한다. JAVA SE API Applet AWT RMI JDBC Swing Collections Xml binding JavaFX (Merged to Java SE 8) Java 8 Collections Streaming API Java 9 Reactive Streams API Java 9 HTTP/2 API Java EE(Enterprise Edition) Java SE 스펙기반으로 자.. 2021. 8. 18.
[Java] 람다식 람다식(Lambda Expression) 함수적 프로그래밍 기법으로 'y = f(x)' 형태의 함수로 구성된 프로그래밍 기법이다. 즉, 람다식은 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다. 자바 8부터 지원하며 자바는 람다식을 함수적 인터페이스의 익명 구현 객체로 취급한다. '람다식 → 매개변수를 가진 코드 블록 → 익명 구현 객체' 익명 함수(Anonymous Function) : 함수의 이름이 없는 함수로, 익명 함수들은 모두 일급 객체이다. 일급 객체인 함수는 변수처럼 사용가능하며 매개 변수로 전달이 가능하는 등의 특징을 가지고 있다. 변수.. 2021. 8. 10.
[Java] 스트림 Stream 개념 스트림은 반복자 스트림은 컬렉션(배열 포함)의 요소를 하나씩 참조해서 람다식으로 처리할 수 있는 반복자이다. 람다식, 스트림 둘 다 자바 8부터 사용 가능 8이전에는 Iterator를 사용함 특징 1. 람다식으로 요소 처리 코드를 제공한다. 스트림이 제공하는 대부분의 요소 처리 메소드는 함수적 인터페이스 매개타입을 가진다. 매개값으로 람다식 또는 메소드 참조를 대입할 수 있다. 2. 내부 반복자를 사용하므로 병렬 처리가 쉽다. 외부 반복자(ex. Iterator) - 개발자가 코드로 직접 컬렉션 요소를 반복해서 요청하고 가져오는 코드 패턴 내부 반복자 - 개발자 코드가 람다식이되고, 컬렉션은 내부적으로 요소들을 반복하는 스트림을 활용해서 람다식을 요소마다 적용시킴. - 컬렉션 내부에서 요소들을 반복.. 2021. 7. 28.
[Java] 제네릭(Generic) 개념 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. 왜 필요할까? 1. 중복되는 소스를 하나로 묶어 소스코드의 재사용성을 극대화 하기 위해서 데이터 타입별로 클래스를 생성할 필요 없이 하나의 클래스에서 데이터 타입만 바꿔 조립하듯 코드 재활용이 가능하다. 2. 객체 생성시 사용하려고 하는 데이터타입에 대한 제한을 줄 수 있다. 효과 → 컴파일 타임에 타입 체크를 하기 위함이나 타입 캐스팅(형변환)을 제거하여 프로그램 성능 향상 → 형변환이 필요없고, 타입안정성이 보장된다. extends T(상한 경계), ? super T(하한 경계), ?(와일드 카드) 데이터 타입을 제한하게 되면 얻을 수 있는 이점은 상속 관계에서 있다. 상속 관계에서 자식은 부모의 모든 것을 가져다 사용할 수 있다.. 2021. 7. 28.
[Java] 자바 가상 머신(Java Virtual Machine) JVM(Java Virtual Machine) Java로 개발한 프로그램을 실행하기 위한 가상머신. 자바 가상 머신을 뜻하는 말로 바이트코드를 실행하는 주체이다. 운영체제 위에서 동작하므로 플랫폼에 독립적으로 Java 프로그램을 실행할 수 있다. 프로그램 메모리를 관리하고 최적화하는 것 물리적인 실제의 기계가 아니라 추상적인 장치이다. 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어 들여서 자바 API와 함께 실행하는 것 자바 코드를 실행하기 위해서는 자바에서 javac 명령을 통해 바이트코드(.class)를 만들고, 바이트코드를 JVM이 인터프리터 방식으로 기계어로 번역하며 실행한다. JVM 구성요소 1. Class Loader JVM은 런타임시에 처음으로 클래스를 참조할 때 해당.. 2021. 7. 28.
[Java] Primitive type vs Reference type 기본형(Primitive type) 총 8가지의 기본형 타입(Primitive type)을 미리 정의하여 제공한다. 비객체, Null이 존재하지 않음 실제 값을 저장하는 공간으로 스택 메모리에 저장 문법상 에러 → 컴파일 에러 발생 타입 할당되는 메모리 크기 기본값 데이터의 표현 범위 논리형 boolean 1 byte false true, false 정수형 byte 1 byte 0 -128 ~ 127 short 2 byte 0 -32,768 ~ 32,767 int(기본) 4 byte 0 -2,147,483,648 ~ 2,147,483,647 long 8 byte 0L -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 실수형 float 4 byte 0.0F .. 2021. 4. 18.
[Java] HashMap, LinkedHashMap, TreeMap, Hashtable 차이 '코딩인터뷰'와 '유튜브'를 참고하여 작성하였습니다. HashMap, LinkedHashMap, TreeMap, Hashtable 네 가지 모두 키(key)에서 값(value)으로의 대응 관계가 있고 키를 기준으로 순회할 수 있다. 이 클래스들의 가장 큰 차이점은 시간 복잡도와 키가 놓이는 순서에 있다. HashMap 검색과 삽입에 O(1) 시간이 소요된다. 키의 순서는 무작위로 섞여 있다. 구현은 연결리스트로 이루어진 배열로 되어 있다. null key와 null value를 모두 허용 LinkedHashMap 검색과 삽입에 O(1) 시간이 소요된다. 키의 순서는 삽입한 순서대로 정렬되어 있다. 구현은 양방향 연결 버킷(double-linked bucket)으로 구현되어 있다. TreeMap 검색과 삽.. 2021. 4. 3.
[Java] ==, equals, instanceof == vs equals 기본형 비교 : == 객체 비교 : equals 자신(this)와 주어진 객체(obj)를 비교한다. 같으면 true, 다르면 false 기본적으로 주소값을 비교하므로 값을 비교하도록 오버라이딩을 해야한다. obj의 형변환 후 값 비교 기본형과 객체(참조형)에 대한 설명은 👉여기 참고! instanceof 연산자 참조변수 형변환 가능여부 확인에 사용. 형변환은 조상과 자손간의 변환에서만 가능. 참조변수를 변경함으로써 멤버변수의 갯수를 조절하기 위하여 형변환을 한다. (참조변수를 변경함으로써 인스턴스의 원래 기능을 모두 사용하기 위하여 형변환을 한다.) 예) Car에서는 자손타입의 메소드도 사용하기 위해서 FireEngine으로 형변환하고 FireEngine의 메소드를 호출할 수 있다.. 2020. 9. 9.
[Java] finalize 메소드 발단 c++을 주로 썼다보니 생성자, 소멸자에 대한 개념이 있었는데 이번에 학교 과제를 하게 되면서 Swing 애플리케이션을 작성하다가 애플리케이션이 꺼질 때 다른 객체도 종료하고 싶어서 Java 소멸자를 알아보았다. Java에는 소멸자 메소드는 따로 없고, 유사하게 작동하는 finalize가 있다고 한다. 하지만, 자바는 가비지 컬렉터(GC)가 힙 영역을 관리하고 있기 때문에 finalize 메소드를 쓰더라도 언제 동작할지 모르고(실행을 보장하지 않음) 사용자가 직접 작성하는 것도 위험하다는 의견이 있었다. 무엇보다도 Java9부터는 Object.finalize가 사라진다는 글을 보고 나서는 더 이상 사용하지 않는 메소드임을 알게 되었고, 찾아봤던 질문의 답변도 대부분 finalize()를 통한 방법이.. 2020. 9. 8.