공부일기/Java 8
-
좋은 객체 지향 설계의 5가지 원칙(SOLID)공부일기/Java 8 2021. 6. 21. 19:15
1. SRP(Single Responsibility Principle) 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것이 모호한데, 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 ex) UI 변경, 객체의 생성과 사용을 분리 2. OCP(Open/Closed Principle) 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 활용한다. 역할과 구현의 분리 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 문제점 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다. 분명 다형성을 사용했지만 OCP를 지킬 수 없다. -> 객체를 생성하고,..
-
Java 항해일지 - 13. I/O공부일기/Java 8 2021. 2. 28. 12:55
목표 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 I/O 입출력 입출력이란? 입출력(I/O)란 Input과 Output의 약자로 입력과 출력, 간단히 입출력이라 한다. 입출력은 컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 키보드로부터 데이터를 입력받거나, System.out.println()을 이용해 모니터 화면에 출력하던가. 스트림 (Stream) / 버퍼 (Buffer) / 채널 (..
-
Java 8 - 8. 애노테이션의 변화공부일기/Java 8 2020. 12. 26. 13:57
애노테이션 관련 변화 자바 8부터 애노테이션을 타입 선언부에도 사용할 수 있게 됨. 자바 8부터 애노테이션을 중복해서 사용할 수 있게 됨. 타입 선언 부 제네릭 타입 변수 타입 매개변수 타입 예외 타입 ... 타입에 사용할 수 있으려면 TYPE_PARAMETER: 타입 변수에만 사용할 수 있다. TYPE_USE: 타입 변수를 포함해서 모든 타입 선언부에 사용할 수 있다. import java.util.Arrays; import java.util.List; public class App { public static void main(@Chicken String[] args) throws @Chicken RuntimeException { List names = Arrays.asList("Something")..
-
Java 8 - 7. Callable과 Future공부일기/Java 8 2020. 12. 25. 16:18
Callable Runnable과 유사하지만 return을 통해 작업의 결과를 받아볼 수 있다. Future 비동기적인 작업의 현재 상태를 조회하거나 결과를 가져올 수 있다. https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html 결과를 가져오기 get() 블록킹 콜이다. 타임아웃(최대한으로 기다릴 시간)을 설정할 수 있다. 아래 예제 같은 경우 started! 출력 후 2초를 기다린다. 그 후 Hello를 꺼내고 출력한 뒤 End!를 출력, 그리고 쓰레드를 종료한다. package Java8; import java.util.concurrent.*; public class Main { public static void main..
-
Java 8 - 6. Concurrent 프로그래밍과 Executors공부일기/Java 8 2020. 12. 24. 21:55
Concurrent 소프트웨어란? 동시에 여러 작업을 할 수 있는 소프트웨어 예) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있다. 또는 화면녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있다. 위의 예시처럼 여러가지 프로그램을 사용하는 것도 맞고, 한 프로그램 내에서 여러가지 동시작업이 일어나는 것도 해당한다. 게임을 하는 경우 캐릭터가 이동하거나 시선을 바꿀 때 캐릭터를 이동시키면서 새로운 배경을 불러오는 것을 예로 들 수 있다. 자바에서 지원하는 컨커런트 프로그래밍 멀티프로세싱 (ProcessBuilder) 멀티쓰레드 자바 멀티쓰레드 프로그래밍 Thread / Runnable Thread 상속 package Java8; public class Mai..
-
Java 8 - 5. Date & Time공부일기/Java 8 2020. 12. 23. 16:03
자바 8에 새로운 날짜와 시간 API가 생긴 배경 그전까지 사용하던 java.util.Date 클래스는 mutable 하기 때문에 thead safe하지 않다. 클래스 이름이 명확하지 않다. Date인데 시간까지 다룬다. 버그 발생할 여지가 많다. (타입 안정성이 없고, 월이 0부터 시작한다거나..) 날짜 시간 처리가 복잡한 애플리케이션에서는 보통 Joda Time을 쓰곤했다. 자바 8에서 제공하는 Date-Time API JSR-310 스팩의 구현체를 제공한다. 디자인 철학 Clear Fluent Immutable Extensible 주요 API 기계용 시간 (machine time)과 인류용 시간(human time)으로 나눌 수 있다. 기계용 시간은 EPOCK (1970년 1월 1일 0시 0분 0초..
-
Java 8 - 4. Optional공부일기/Java 8 2020. 12. 22. 15:32
1. Optional이란? 비어있을 수도 있고, 뭔가를 담고 있을 수도 있는 컨테이너 인스턴스의 타입! 자바 프로그래밍에서 NullPointerException을 종종 보게 되는 이유 null을 리턴하니까! && null 체크를 깜빡했으니까! 메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수 없는 경우 선택할 수 있는 방법 예외를 던진다. (비싸다, 스택트레이스를 찍어두므로 예외를 던지는거 자체가 리소스에 영향을 줌.) null을 리턴한다. (비용 문제가 없지만 그 코드를 사용하는 클라이언트 코드가 주의해야 한다.) (자바 8부터) Optional을 리턴한다. (클라이언트에 코드에게 명시적으로 빈 값일 수도 있다는 걸 알려주고, 빈 값인 경우에 대한 처리를 강제한다.) 주의할 것 리턴값으로만 쓰..
-
Java 8 - 3. Stream공부일기/Java 8 2020. 12. 16. 16:35
1. Stream 연속된 데이터를 처리하는 Operation들의 모음. 스트림은 데이터를 담고 있는 저장소가 아니며, 스트림으로 처리되는 데이터 소스는 변경되지 않는다. 오직 한 번만 처리하며 무제한일 수 있다. 중개 오퍼레이터와 종료 오퍼레이터로 나눌 수 있다. 중개 오퍼레이션 Stream을 리턴한다. Stateless / Stateful 오퍼레이션으로 더 상세하게 구분할 수도 있다. (대부분은 Stateless지만 distinct나 sorted 처럼 이전 이전 소스 데이터를 참조해야 하는 오퍼레이션은 Stateful 오퍼레이션이다.) filter, map, limit, skip, sorted, ... 종료 오퍼레이션 Stream을 리턴하지 않는다. collect, allMatch, count, for..