Java/라이브스터디

    람다식

    목표 자바의 람다식에 대해 학습하세요. 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다식 람다 식은 자바 8 버전에서 추가된 기능입니다. 오라클 자바 튜토리얼에서는 람다식의 사용배경에 앞서 기존 익명클래스의 불편함에 대하여 얘기합니다. 하나의 메소드만 포함하는 인터페이스처럼 익명 클래스의 구현이 매우 단순할 경우 사용이 불편할 수 있다. 위와 같은 상황에서 불편함을 해결하기 위하여 등장한 기능이 람다식 이라고 합니다. 앞서 말한 하나의 메소드만 포함하는 인터페이스는 주로 함수형 인터페이스라고 부릅니다. 이런 함수형 인터페이스의 예시로 멀티쓰레드를 공부할 때 배웠던 Runnable 인터페이스가 떠올랐습니다. 람다식의 사용에 앞서서 기존 익명클..

    제네릭

    제네릭? 제네릭, 어노테이션, 스트림, 람다.. 자바를 접하게되면서 "이게 뭐지?" 라는 생각이 들게만든 키워드이다. 어노테이션은 기능을 가진 주석. 람다는 함수형 인터페이스를 간편하게 표현. 스트림은 작업의 흐름을 표현하는 방법. 자바 공부를 하게되면서 각각의 키워드를 나름대로 위와 같이 생각하게 되었다. 그렇다면 제네릭은 무엇일까? 제네릭은 클래스나 인터페이스 또는 메소드 정의 시에 이 자리에 사용될 타입을 호출이나 선언 시 지정해라. 를 표현하는 방법이다. 여기서 이런 종류에 프리미티브 타입은 올 수 없다. 제네릭이 사용된 List인터페이스를 보면 와 같이 표현된 부분을 찾을 수 있으며, 이 부분이 바로 제네릭이다. 이는 List를 선언할 때 E타입의 값을 가지도록 지정할 수 있다는 의미를 가진다고..

    입출력

    목표 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 자바의 입출력 자바에서의 입출력은 Stream, Buffer, Channel 기반으로 작동합니다. 스트림( Stream ) 스트림(Stream) 이란, 데이터의 흐름 또는 데이터의 순서를 의미합니다. Source( 키보드 or 파일 etc.. )에서 InputStream을 이용하여 데이터를 읽어 들이고 OutputStream을 이용하여 Destination( 콘솔 or..

    애노테이션

    학습할 것 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션이란? 애노테이션이란 주석의 한 형태로 데이터에 대한 데이터 즉, 메타 데이터를 나타냅니다. 기본적으로 자바에서 제공하는 7개의 애노테이션이 존재하며 그 종류는 다음과 같습니다. java.lang 패키지에서 제공하는 애노테이션 @Deprecated : 더이상 사용되지 않음 @Override : 재정의 된 메소드 @SuppressWarnings : 특정 컴파일러 경고를 억제 java.lang.annotation 에서 가져오는 애노테이션 (유저 애노테이션에 사용) @Retention : 애노테이션의 유지시점 @Documented : javadoc 으로 문서 생성 시 애노테이션의 설명 추가 ..

    Enum

    학습목표 enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet Enum 서로 관련이 있으면서 의미가 있는 상수들의 집합. 정의 방법. [접근 지시자] enum [Enum 타입]{ /* enum 변수목록 */ } /* 예시 */ public enum Months{ January, February, March, April, May, June, July, August, September, October, November, December; } 자바에서의 Enum은 기본적으로 클래스입니다. 클래스의 특징인 상속은 불가능하지만 메소드와 필드, 생성자를 사용하는게 가능합니다. Enum을 배우면서 좀 신기하다 싶었던 것 들을 되짚어봅시다! ..

    자바의 멀티쓰레드 프로그래밍

    학습목표 Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Thread Thread란 프로세스 내에서 실행되는 흐름의 단위를 의미하며, MultiThread란 둘 이상의 스레드를 동시에 실행하는 방식을 의미합니다. Thread를 생성한다는 것은 메인스레드와 동시에 돌아가는 작업을 생성한다는 의미를 가집니다. MultiThread는 작업을 잘게 나눈다음 번갈아가면서 실행하는 것을 의미합니다. 새로운 작업 Thread를 만들기 위해서는 해당 스레드에서 실행되어야하는 코드를 제공해야합니다. Runnable 인터페이스의 객체를 Thread 생성자의 파라미터로 사용하는 방법 Thread 클래스를 상속하여 실행코드를 작성하는 방법 2번 방법의 경우, 클래..

    예외 처리

    목표 자바의 예외처리에 대해 학습하기 학습할 것 (필수) 자바에서의 예외처리방법(try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 자바에서의 예외처리 자바에서의 예외처리는 일반적으로 try-catch-finally 블록을 이용하여 처리합니다. try{ // 예외가 일어날 가능성이 있어서 검사해야하는 코드 }catch(IOException e){ // 특정 예외의 발생 시 처리해당하는 예외를 처리하는 블록 }catch(RuntimeException e){ // 특정 예외의 발생 시 처리해당하는 예외를 처리하는 블록 }finally{ /..

    인터페이스

    목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스 인터페이스란, 일반적으로 상수와 추상메소드로만 이루어진 클래스를 의미합니다. 인터페이스의 정의 상수 : public static final 로 선언된 변수 추상메소드 : abstract 로 선언된 메소드. 구현부가 없다. public interface sample{ public static final int value = 10; public abstract void ..

    패키지

    목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 package 패키지란, 클래스와 인터페이스의 집합을 의미하며 서로 관련된 클래스등의 파일들을 그룹화하는 역할을 맡고 있습니다. 대표적인 패키지로는 java.lang 패키지가 존재합니다. 해당 패키지 밑에서는 String, Integer, Long 등등의 클래스들이 합니다. 해당 패키지내의 클래스들은 그 자체로 사용이 가능하며, 패키지 명을 포함하여 사용할 수도 있습니다. Integer integer = 10; java.lang.Integer integer1 = 10; 패키지의 이름을 지정할 때, Java나 int 와 같은 예약어가 ..

    상속

    목표 자바의 상속에 대해 학습하기 학습목표 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 ( Dynamic Method Dispatch ) 추상 클래스 final 키워드 Object 클래스 상속 class SubClass extends SuperClass{ /*...*/ } 자바에서의 상속은 extends키워드와 implements를 통하여 이루어집니다. 슈퍼 클래스에 작성된 내용을 서브클래스에서도 필요로 할때 주로 사용됩니다. public class Parent { public int Parent_int; public String Parent_String; Parent(int Parent_int, String Parent_String){ this.Parent_int = ..