자바, 코틀린 사용시 Object JSON 변환간에 ObjectMapper를 많이 사용한다. // Object -> JSONUser user = new User("John", 25);String json = objectMapper.writeValueAsString(user);// JSON -> ObjectUser user = objectMapper.readValue(json, User.class); 성능이 중요한 애플리케이션에서 ObjectMapper는 조심해서 사용해야 한다.왜냐하면 내부적으로 자바의 리플렉션을 사용하여 변환해주기 때문이다. 리플렉션이 안좋은 이유는 두가지 문제가 있다1. JIT(Just-In-Time) 컴파일러의 최적화를 제대로 활용할 수 없다.JIT 컴파일러는 실행 시간을 단축하기..
github.com/woowacourse/java-racingcar-precourse woowacourse/java-racingcar-precourse 자동차 경주 게임 미션을 위한 저장소. Contribute to woowacourse/java-racingcar-precourse development by creating an account on GitHub. github.com 우테코 프리코스의 미션은 요구사항에 맞춘 코드를 작성해야 합니다. 그 중 하나는 다음과 같습니다. else를 왜 쓰지 말라는 것일까요? if-else문이 너무 많으면 읽기가 매우 어려울뿐더러, 조건에 대해 명시적이지 않습니다. 따라서, 함수 내에서(if문) return을 함으로서, 뒤의 코드로 진입하지 않아 else문을 사용할..
Stream 소개 데이터를 담고 있는 저장소(컬렉션)이 아니다. Functional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다. Functional 하다. 결과가 또 다른 stream이 되는 것이지, 전달받은 데이터 자체가 변경되는 것이 아니다. 스트림으로 처리하는 데이터는 오직 한번만 처리한다. 컨베이어 벨트에 항목이 한번 지나가는 것이라고 보면된다.(한번 지나면 끝) 무제한일 수도 있다. (Short Circuit 메소드를 사용해서 제한할 수 있다.) 중개 오퍼레이션은 근본적으로 lazy 하다. stream에 사용하는 것은 2개로 나눌 수 있다. (중개, 종료) 중개 오퍼레이션은 lazy : lazy하다는 말은 종료 오퍼레이션이 나오기 전까지는 실행하지 않는 것을 뜻한다. 즉..
목표 자바의 람다식에 대해 학습하세요. 학습할 것 람다식 사용법 함수형 인터페이스 Variable, Capture 메소드, 생성자 레퍼런스 람다식이란? 람다식은 메소드를 하나의 '식(expression)'으로 표현한 것이다. int[] arr = new int[5]; Arrays.setAll(arr, i -> (int)(Math.random() * 5) + 1); 위의 문장에서 '() -> (int)(Math.random() * 5) + 1'이 바로 람다식이다. 메소드를 람다식으로 표현하면 메소드의 이름과 반환값이 없으므로, 람다식을 '익명 함수(anonymous function)'이라고도 한다. 위 람다식이 하는 일을 메서드로 표현하면 다음과 같다. int method(){ return (int)(Ma..
목표 자바의 제네릭에 대해 학습하세요. 학습할 것 제네릭 사용법 제네릭 주요 개념(바운디드 타입, 와일드 카드) 제네릭 메소드 만들기 Erasure 제네릭이란? 데이터타입을 일반화하는것을 의미한다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시 type check를 하면 장점이 있다. 클래스나 메소드 내부에서 사용되는 객체의 타입의 안정성을 높일 수 있다. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. Java 5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 Object타입을 사용했었다. 하지만 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 타입을 변환해야 하고, 이..
목표 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 I/O 입출력 입출력이란? 입출력은 컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 키보드로부터 글자를 입력 받는다 -> 입력 System.out.println()을 이용해 화면에 출력한다 -> 출력 스트림(stream) 자바에서 어느 한 쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 역할을 수행한다. 스트림이..
목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 Annotation 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했다. 그래서 소스코드의 주석 '/** ~ */'에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML 문서를 생성해내는 프로그램(javadoc.exe)를 만들어 사용했다. 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 바로 애너테이션이다. 애너테이션은 주석(comment)처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 ..
목표 자바의 열거형에 대해 학습하세요. 학습할 것 enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum을 정의하는 방법 enum이란? enum(열거형)은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 상수를 여러개 정의할 때 사용한다. enum은 여러 상수를 정의한 후, 정의된 것 이외의 값은 허용하지 않는다. 가장 간단하게 선언하는 법은 다음과 같다. enum 열거형이름 { 상수명1, 상수명2, 상수명3, ...} ※ 추가적인 특징 - 열거형 필드의 이름은 상수이기 때문에 대문자로 표기한다. - 기본적으로 0부터 시작하는 정수값이 연속적으로 부여된다. public class EnumDemo { enum Season..
github.com/whiteship/live-study/issues/10 10주차 과제: 멀티쓰레드 프로그래밍 · Issue #10 · whiteship/live-study 목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 마감일시 2021년 1월 23일 github.com 목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할것 Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Process란? 단순히 실행중인 프로그램 프로그램을 실행하면 운영체제에 의해 메모리 공간을 할당 받아 실행 중인 것을 말한다...
github.com/whiteship/live-study/issues/9 9주차 과제: 예외 처리 · Issue #9 · whiteship/live-study 목표 자바의 예외 처리에 대해 학습하세요. 학습할 것 (필수) 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 github.com 목표 자바의 예외 처리에 대해 학습하세요. 학습할것 예외 처리란? & 예외 처리의 필요성(자체 추가) 자바에서 예외 처리 방법 (try-catch, throw, throws, finally) + Multicatch Block, try-with-resources 예외처..