Java 공부

    Java Stream 정리글

    왜 사용할까 자바 8부터 람다를 활용하여 함수형 프로그래밍이 가능해졌다. 컬렉션에 존재하던 엘리먼트들을 순회하면서 처리할 수 있는 패턴이다. 장점은 람다식과 함께 사용되어 데이터에 대한 처리를 간결하게 표현하여 코드양을 줄고 가독성이 좋아진다. 람다(lambda)란? 람다의 핵심은 (파라미터) -> {수행할 코드} 를 통해 메소드를 정의하지 않고도 메소드처럼 사용할 수 있다는 것인데 메소드와 같은 기능이지만 정의하지 않고도 사용하는 것이 람다의 핵심이 되겠다 Collection 과 Stream의 차이점은 데이터 계산 시점 ! Collection 모든 값을 메모리에 저장하는 자료구조다. 따라서 Collection에 추가하기 전에 미리 계산이 완료되어있어야 한다. 외부 반복을 통해 사용자가 직접 반복 작업을..

    자바의 데이터 타입(Primitive type, Reference type)

    자바에서 크게 기본형(Primitive Type), 참조형(Reference type) 두가지 타입으로 나뉜다. Java Data Type ㄴ Primitive Type ㄴ Boolean Type(boolean) ㄴ Numeric Type ㄴ Integral Type ㄴ Integer Type(byte, short, int, long) ㄴ Floating Point Type(float, double) ㄴ Character Type(char) ㄴ Reference Type ㄴ Class Type ㄴ Interface Type ㄴ Array Type ㄴ Enum Type ㄴ etc. Primitive Type(기본형) JAVA에서는 총 8가지의 Primitive type을 미리 정의하고 제공합니다. 자바에서..

    Java 컴파일 과정

    들어가기전 면접에서 자주 나오는 컴파일 과정 공부 ! 자바는 OS에 독립적인 특징을 가지고 있다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하자. 자바 컴파일 순서 개발자가 자바 소스코드(.java)를 작성합니다. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다. 컴파일된 바이트..

    동기화(Synchronized ) vs 비동기화(Asynchronized) / 블로킹(blocking)과 논블로킹(non-blocking)

    Sync / Async 동기는 요청과 그 결과가 동시에 일어난다는 뜻이며, 다시 말하면, 어떤 객체 또는 함수 내부에서 다른 함수를 호출했을 때 이 함수의 결과를 호출한 쪽에서 처리하면 동기입니다. 비동기는 요청과 그 결과가 동시에 일어나지 않는다는 뜻이며, 동기와 달리 어떤 객체 또는 함수 내부에서 다른 함수를 호출했을 때 이 함수의 결과를 호출한 쪽에서 처리하지 않으면 비동기입니다. -> 대표 예시 Ajax 1) 동기의 예 일반적으로 사용하는 함수들은 대부분 동기적 방식입니다. C언어의 scanf()와 Java의 Scanner 객체의 next()메서드 같이 사용자의 입력을 받는 함수들이 그 예입니다. Scanner sc = new Scanner(System.in); int num = sc.nextIn..

    Java 객체 직렬화(Serialization) 와 역직렬화(Deserialization)

    직렬화, 역직렬화란? 객체지향 언어인 Java는 프로그램의 모든 데이터들이 객체로 이루어져 있다고 봐도 무방하다. ​그렇다면 Java로 만든 프로그램의 데이터(객체)를 외부로 전송하려면 어떻게 해야 할까? 네트워크를 공부했다면 기본적으로 데이터인 객체 그 자체를 네트워크 상으로 전송할 수 없다는 것을 알 것이다. 이를 전송하기 위해선 객체 그 자체보단 조금 더 단순한 형태로 변환해야 할 것이다. ​ Java의 I/O 처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체의 내용을 저장/복원하거나 네트워크 상으로 전송하기 위해서는 객체의 내용을 I/O가 처리할 수 있는 형태로 변환해 줘야 한다. ​Java에서 말하는 객체 직렬화는 이처럼 Java의 객체를 외부로 저장/복원하거나 네트워크 ..

    자바 스레드(Thread) 정리글

    쓰레드(Thread) 프로세스 운영체제로부터 작업을 할당받는 작업의 단위이며, 실행 중인 하나의 어플리케이션 (ex : 크롬을 새 창으로 2개를 띄웠다면, 2개의 프로세스가 실행 중이라 말할 수가 있다. 쓰레드 프로세스가 할당 받은 자원을 이용하는 실행의 단위이며, 한 프로세스에서 동작되는 여러 실행 흐름이라고 볼 수가 있다. 1. JVM에 의해 하나의 프로세스가 발생하고 main( ) 안의 실행문 들이 하나의 스레드입니다. 2. main( ) 이외의 또 다른 스레드를 만들려면 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현합니다. 3. 다중 스레드 작업 시에는 각 스레드 끼리 정보를 주고받을 수 있어 처리 과정의 오류를 줄일 수 있습니다. 4. 프로세스끼리는 정보를 주고받을 수 없습니..

    가비지 컬렉션(Garbage Collection)이란

    가비지 및 가비지의 역할 유효하지 않은 메모리를 가바지(Garbage)라고 하며, C / C++의 경우는 메모리를 개발자가 할당 및 해제를 해줘야하는데 자바는 가비지 컬렉터(Garbage Collerctor)가 자동으로 불필요한 메모리를 정리해줍니다. - > 자동으로 해줘서 장점이지만 동시에, 느리다는 단점이 있다고 합니다. 가비지 컬레션은 메모리 해제하는 전반적인 작업을 뜻한다면, 가비지 컬렉터는 JAVA에서의 해제 작업 담당을 말합니다. 가비지의 예시 String[] array = new String[2]; array[0] = "0"; array[1] = "1"; array = new String[] {'X', 'Y'}; 위 코드에서 array = new String[] {'X', 'Y'} 3번째 라..