Java
-
람다 표현식백기선(인프런 강의)/더 자바, Java 8 2020. 7. 7. 22:38
람다 (인자 리스트) -> {바디} 인자 리스트 인자가 없을 때: () 인자가 한개일 때: (one) 또는 one 인자가 여러개 일 때: (one, two) 인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시할 수도 있다. (Integer one, Integer two) 바디 화상표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 { }를 사용해서 묶는다. 한 줄인 경우에 생략 가능, return도 생략 가능. 변수 캡처 (Variable Capture) 로컬 변수 캡처 final이거나 effective final 인 경우에만 참조할 수 있다. 그렇지 않을 경우 concurrency 문제가 생길 수 있어서 컴파일가 방지한다. effective final 이것도 역시 자바 8부터 지원하는 ..
-
함수형 인터페이스와 람다 표현식백기선(인프런 강의)/더 자바, Java 8 2020. 7. 6. 09:02
함수형 인터페이스(Funtional Interface) 추상 메소드를 딱 하나만 가지고 있는 인터페이스 SAM(Single Abstract Method) 인터페이스 @FunctionalInterface 애노테이션을 가지고 있는 인터페이스 람다 표현식(Lambda Expressions) 함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있다. 코드를 줄일 수 있다. 메소드 매개변수, 리턴타입, 변수로 만들어 사용할 수 있다. 자바에서 함수형 프로그래밍 함수를 First class object로 사용할 수 있다. 순수함수(Pure function) 사이드 이펙트를 만들 수 없다.(함수 밖에 있는 값을 변경하지 못한다.) 상태가 없다.(함수 밖에 정의되어있는) 고차 함수(High-Order Fucntio..
-
SynchronizedJava & 배경지식/기본상식 2020. 5. 2. 00:19
Synchronized란? Multi-thread로 인하여 동기화를 제어해야 하는 경우가 생긴다. 이 때 자바에서 제공하는 키워드인 Synchronized 키워드를 사용하여 Multi-thread 상태에서 동일한 자원을 동시에 접근하게 되었을 때 동시 접근을 막게 된다. 즉 공유 데이터에 lock을 걸어 먼저 작업중이던 쓰레드가 작업을 완전히 끝낼 때까지 다른 쓰레드에게 제어권이 넘어가더라도 데이터가 변경되지 않도록 보호함으로써 쓰레드의 동기화를 가능하게 한다. 더 쉽게 말한다면 쓰레드A가 작업하던 도중에 다른 쓰레드B에게 제어권이 넘어갔을 때, 쓰레드A가 작업하던 공유데이터를 쓰레드B가 임의로 변경하였다면, 다시 쓰레드A가 제어권을 받아서 나머지 작업을 마쳤을때 원래 의도한 것과는 다른 결과를 얻기 때..
-
JVM의 메모리 구조Java & 배경지식/기본상식 2020. 4. 26. 23:33
JVM(Java Virtual Machine)이란? 자바를 싱행하기 위한 가상 기계이다. 즉 자바를 실행하기 위한 가상 컴퓨터이다. 자바로 작성된 어플리케이션은 모두 이 가상 JVM에서만 실행되기 때문에 자바 어플리케이션이 실행되기 위해서는 JVM이 필요 자바 바이트 코드를 실행할 수 잇는 주체 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실생시켜주는 역할을 한다. 가상기계란? 소프트웨어로 구현된 하드웨어 JVM의 구성 Class Loader, Execution Engine, Garbage Collector, Runtime Data Area 로 구성되어있다. Class Loader 자바에서 소스를 작성하면 Person.jav..
-
많은 데이터를 처리할 때 - OutOfMemoryError개발 오류 및 해결 방안 2020. 4. 23. 13:01
오류 발생 이유 방재회사 회사 특성상 실시간으로 들어오는 데이터를 분석하여 피해결과를 구하는 부분이 많았고, 금융 회사처럼 피해결과에 대해 구하는 부분에 대해 보수적으로 대하는 부분이 있었다. 그렇기 때문에 소규모 테스트에서는 발생되지 않았던 오류가 실제 운영서버로 가면서 발생되는 오류가 생겼다. 하나의 지역(시군구)에 대한 피해액을 계산 할 때는 문제가 없었으나 이게 전국으로 확장이 되면서 많은 데이터를 가져오거나 insert를 할 때 발생이 되었다. 오류 결과는 아래와 같다. java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.concurrent.FutureT..
-
자바의 자료구조Java & 배경지식/기본상식 2020. 3. 19. 08:56
인터페이스 구현클래스 특징 List Stack Vector ArratyList LinkedList 1. 순서가 있는 데이터의 집합, 데이터의 중복을 허용 Set HashSet TreeSet 1. 순서를 유지하지않는 데이터의 집합, 데이터의 중복을 허용하지 않는다. Map HashMap TreeMAp HashTable Properies 1. 키와 값의 쌍으로 이루어진 데이터의 집합 2. 순서를 유지되지 않고, 키는 중복을 허용하지 않으면 값의 중복을 허용 List Interface LinkedList 1. 양방향 포인터 구조로 데이터 삽입, 삭제가 빈번할 경우 빠른 성능을 보장 2. 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 사용 Vector 1. ArrayList의 구형버전이며, 모든 메소드가 동기..
-
Session Facade 패턴Java & 배경지식/패턴 2020. 2. 10. 17:00
Session Facade 패턴 소트프웨어 라이브러리를 쉽게 사용 및 피해할수 있게 해준다. 공통적인 작업에 대해 간편한 메소드들을 제공 퍼사드 라이브러리를 사용하는 코드들을 좀 더 읽기 쉽게 해준다. 라이브러리 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소시켜 준다. 대부분의 바깥쪽의 코드가 퍼사드를 이용하기 때문에 시스템을 개발하는데 있어 유연성이 향상 좋게 작성하지 않은 API의 집합을 하나의 좋게 작성되 API로 감싸준다. 위의 역활들을 한마디로 말하면 서브시스템 내부에 있는 클래스에 접근할 수 있는 하나의 통합된 인터페이스를 제공 아래 Java 코드 예제는 사용자(you)가 퍼사드(컴퓨터)를 통해 컴퓨터 내부의 부품(CPU, HDD) 등을 접근한다는 내용의 추상적인 예제이다. /*..