JAVA
-
[live-study] 15주차 :: 람다식JAVA/라이브 스터디 | whiteship 2021. 3. 6. 12:00
참고도서 : Java의 정석(3rd Edition), 이것이 자바다 0. 람다식 람다식 (Lambda Expression) 람다식은 간단히 말해서 메소드를 하나의 식(expression)으로 표현한 것이다. 자바 8부터 람다식을 지원하였다. 람다식은 익명 함수(anonymous function)를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향 언어에 가깝다. 람다식 장점 자바 코드가 매우 간결해졌다. 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다. 1. 람다식 사용법 람다식 형태 람다식은 매개 변수를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체를 생성한다. 예를 들어, Runnable 인터페이스의 익명 구현 객체를 생성하는 코드는 아래와 같다. 람다식은 (매개변..
-
[live-study] 14주차 :: 제네릭JAVA/라이브 스터디 | whiteship 2021. 2. 27. 02:08
참고도서 : Java의 정석(3rd Edition), 이것이 자바다 0. 제네릭이란 제네릭(Generic)이란 Java5부터 제네릭(Generic) 타입이 새로 추가되었다. 제네릭은 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 즉, 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 걸러낼 수 있게 되었다. 제네릭은 컬렉션, 람다식, 스트림, NIO에서 사용되며, 클래스와 인터페이스, 그리고 메소드를 정의할 때 타입을 파라미터로 사용할 수 있도록 한다. 제네릭(Generic)의 장점 컴파일 시 강한 타입 체크를 할 수 있다. 즉, 컴파일 시 미리 타입을 체크하기 때문에, 객체의 타입 안정성을 제공한다. 타입..
-
[live-study] 13주차 :: I/OJAVA/라이브 스터디 | whiteship 2021. 2. 21. 14:11
참고도서 : Java의 정석(3rd Edition), 이것이 자바다 1. 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 입출력 입출력이란 말 그대로 입력과 출력을 줄여서 말한 것으로 Input과 Output (I/O)을 말한다. 키보드로부터 데이터를 입력받는다거나, 화면에 출력한다던가 하는 것이 입출력의 기본 예이다. IO / NIO 자바 4부터 새로운 입출력(NIO : New Input/Output)이라는 뜻에서 java.nio 패키지가 포함되었다. 그리고 자바 7부터는 자바 IO와 NIO 사이의 일관성 없는 클래스 설계를 바로 잡고, 비동기 채널 등의 네트워크 지원을 강화한 NIO.2 API가 추가되었다. NIO.2는 java.nio2 패키지로 제공되지 않고..
-
[live-study] 12주차 :: 애노테이션JAVA/라이브 스터디 | whiteship 2021. 2. 15. 00:12
참고도서 : Java의 정석(3rd Edition) 0. 애노테이션 애노테이션이란 애노테이션(Annotation)은 주석이라는 뜻이다. 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기 보다는, 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했다. 그래서 주석 /** ~ **/ 에 소스코드에 대한 정보를 저장하고, 그 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램 (javadoc.exe)을 만들어서 사용했다. 주석과 마찬가지로 프로그래밍 언어에 영향을 끼치지 않으면서, 유용한 정보를 제공한다. 그리고 모든 애노테이션의 조상은 Annotation (java.lang.annotation.Annotation) 이다. 하지만, 애노테이션은 상속이 허용되지 않으므로 아래와 같이 ex..
-
[live-study] 11주차 :: EnumJAVA/라이브 스터디 | whiteship 2021. 2. 15. 00:11
참고도서 : Java의 정석(3rd Edition), Java in a Nutshell 0. Enum Enum(열거형) 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 자바는 C언어와 달리 원래 enum을 제공하지 않았으나 JDK1.5부터 새로 추가되었다. 그리고, 현재 자바의 Enum은 C언어보다 더 많은 장점을 갖고 있다. C/C++같은 경우 enum은 결국 값이 int지만, 자바의 enum은 타입도 관리 할 수 있는 완전한 기능을 갖춘 클래스이다. 1. enum 정의하는 방법 enum 정의 간단하게 아래와 같이 괄호 { } 안에 상수의 이름을 나열하면 된다. 예를 들어, 3가지 Grade를 상수로 정의하는 enum Grade는 아래와 같다. en..
-
[live-study] 10주차 :: 멀티쓰레드 프로그래밍JAVA/라이브 스터디 | whiteship 2021. 2. 15. 00:11
참고도서 : Java의 정석(3rd Edition) 0. 프로세스와 쓰레드 프로세스(Process) 프로세스란 간단히 말해서 '실행 중인 프로그램' 이다. 프로그램을 실행하게 되면 OS로부터 실행에 필요한 자원을 할당 받아서 프로세스가 된다. 프로세스는 (프로그램을 수행하는데 필요한 데이터와 메모리 등의) 자원과 쓰레드로 구성되어 있다. 쓰레드(Thread) 즉, 쓰레드는 프로세스의 자원을 이용해서 실제로 작업을 수행하는 주체이다 그래서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재한다. 이 때, 둘 이상의 쓰레드를 가지는 프로세스를 '멀티쓰레드 프로세스(multi-threaded process)'라고 한다. 하나의 프로세스가 가질 수 있는 쓰레드의 개수는 제한되어 있지 않으나, 쓰레드가 작업을 수..
-
[live-study] 9주차 :: 예외 처리JAVA/라이브 스터디 | whiteship 2021. 2. 6. 22:16
참고도서 : Java의 정석(3rd Edition), Java in a Nutshell 0. 예외처리란 프로그램 에러 (오류) 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있는데, 이러한 결과를 초래하는 원인을 프로그램 에러(오류)라고 말한다. 컴파일 에러(compile-time error) : 컴파일 시점에 발생하는 에러 런타임 에러(runtime error) : 프로그램 실행 도중에 발생하는 에러 논리적 에러(logical error) : 실행과 컴파일은 문제가 없지만, 논리적인 오류가 있어서 발생하는 에러 예외처리 (Exception Handling) 예외처리란 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비해 미리 코드를 작성하는 것이다. ..
-
[live-study] 8주차 :: 인터페이스JAVA/라이브 스터디 | whiteship 2021. 1. 30. 23:20
참고도서 : Java의 정석 3판, Java in a Nutshell 0. 인터페이스란 인터페이스란 인터페이스는 일종의 추상클래스이다. 하지만, 추상클래스보다 추상화 정도가 높아서, 구현된 메서드 또는 일반 멤버 변수를 가질 수 없다. 상수와 추상메서드만 멤버로 가질 수 있다. (JDK 1.8기준) 1. 인터페이스 정의하는 방법 인터페이스 정의 인터페이스를 작성하는 것은 클래스를 작성하는 것과 같은데, 다만 키워드로 class 대신 interface를 사용한다는 것만 다르다. 기본적으로 모든 멤버변수는 상수이며 public static final 인데, 이를 생략할 수 있다. 모든 메서드는 추상화 메서드이며 public abstract 인데, 이를 생략할 수 있다. (단, JDK1.8부터는 인터페이스에서..
-
[live-study] 7주차 :: 패키지JAVA/라이브 스터디 | whiteship 2021. 1. 24. 21:46
참고도서 : Java의 정석, Java in a Nutshell 1. Package 키워드 패키지(Package)란 패키지란 클래스의 묶음이다. 패키지는 클래스를 그룹으로 묶어서 효율적으로 관리 할 수 있다. 패키지가 다르면 같은 이름의 클래스일지라도 서로 다른 패키지내에서 존재할 수 있다. 즉, 지금까지 단순히 클래스 이름으로 표현을 했지만, 사실 클래스의 실제 이름 (full name)에는 패키지명이 포함되어 있다. 클래스가 물리적으로는 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리로 볼 수 있다. 예를 들어, Bus라는 패키지와 Car라는 패키지를 만들었다고 가정한다. 각 패키지 안에는 같은 이름의 클래스 파일 Driver가 존재하지만, 문제가 생기지 않는다. 또한..
-
[live-study] 6주차 :: 상속JAVA/라이브 스터디 | whiteship 2021. 1. 9. 13:14
참고도서 : Java의 정석, Java in a Nutshell 0. 상속 상속이란 상속이란 현실에서는 부모가 자식에게 물려주는 행위를 말한다. 마찬가지로 부모 클래스(기존의 클래스)를 재사용하여 자식 클래스(새로운 클래스)를 작성하는 것을 프로그래밍에서 상속이라고 부른다. 상속을 통해 확장을 보다 쉽게 할 수 있고, 코드의 중복도 제거하여 프로그램의 생산성을 높일 수 있다. 상속은 키워드 'extends'를 이용하여 나타낼 수 있다. 코드 / 상속 관계도 / 상속 후 자식클래스의 범위를 나타내면 다음과 같다. 그림에서 알 수 있듯이 자식클래스가 부모클래스보다 더 넓은 범위이다. 즉, 자식클래스는 부모클래스 안의 멤버(변수, 메소드) 등을 다 상속 받을 수 있으므로, 자식클래스가 부모클래스보다 같거나 더..