일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- jsp
- 파이썬 소스
- oracle
- 오라클 디비
- 자바
- hyperledger
- 자바 프로젝트
- 학점
- smart cast
- 문법 정리
- 파이썬
- 프로젝트
- 알고리즘
- gradle
- MongoDB
- JVM
- 백준 알고리즘
- 티스토리
- 리눅스
- SQL
- c#
- auto configure
- 초대장
- spring
- 유사코드
- resilience4j
- dynamic query
- 오라클
- K6
- 운영체제
- Today
- Total
목록Programming/JAVA (21)
모종닷컴
개요 이번에 Out Of Memory( = OOM) 현상을 파악하기 위해 로컬에서 재현을 위해 JVM 몇 가지 옵션들을 설정했습니다. 혹시라도 누군가에게 도움이 될 수도 있을 것 같아 간단하게 적어봅니다. 먼저 Intellij Idea와 Visual VM을 사용하고 있는데 관련 설정이 필요한 분들은 이 포스트에서 확인하시고 설치해주시면 됩니다. VisualVM에 플러그인 추가 먼저 VisualVm은 기본적으로 JVM 메모리의 힙 영역 메모리를 보여주기는 합니다. 다만 우리가 아는 Survival 영역, Eden 영역, Old Generation 영역 등이 상세히 보여주진 않고 이 합산된 값들만 보여주고 있습니다. 그래서 조금 보기가 힘든데 각 영역을 상세히 보여줄 수 있는 플러그인이 있어 먼저 이를 설치..
CompletableFuture의 예외를 핸들링하는 3가지 handle, whenComplete, excetpionally CompletableFuture의 예외를 처리하는 방법에 대해 알아보려고 합니다. 여러 가지 방법들이 존재하지만 이번 포스팅에서 다룰 방법들은 자바에서 제공하는 기본 메서드들을 설명하려고 합니다. 이에는 handle(), whenComplete(), exceptionally() 세 가지 메서드가 존재합니다. 처음에 봤을 때 뭐가 다른 거지 하고 굉장히 헷갈려서 이번 기회에 글로 조금 정리해보려고 합니다. handle 먼저 handle 메서드를 보도록 하겠습니다. public CompletableFuture handle( BiFunction
1. final 1) 변수 : 변수가 초기화된 이후 변경되지 않는다. 2) 클래스 : 이 클래스는 서브클래스를 가지지 않는다. 다시 말해 이 클래스를 상속할 수 없다. 3) 메소드 : 해당 메소드는 서브 클래스에 의해 오버라이딩 되지 않는다. 2.finally 1) try - catch : try 혹은 catch가 실행된 후 실행 finalize 가비지 컬렉션에서 객체를 destroy 또는 delete 하기 전에 호출하는 메소드이다. 데이터베이스 커넥션이나, 네트워크 커넥션 같은 연관된 자원들을 해제한다. 기본적으로 Object에 선언되어 있으므로, 모든 객체는 finalize를 가지고 있다.
1. 람다 없이 기본 소팅 소팅은 Collections의 소팅을 이용하며, 사용 시 익명함수를 마들어 사용한다. List humans = Arrays.asList(new Human("Jack",10),new Human("Sarah",10)); Collections.sort(humans,new Comparator() { @Override public int compare(Human o1, Human o2) { return o1.getName().compareTo(o2.getName()); } }); System.out.println(humans.get(0).getName()); 2. 람다를 이용한 소팅 다음 예제는 람다를 이용하여 익명함수를 작성하는 것이다. List humans = Arrays.asLis..
Map의 자료구조 Key / Value 형태 Map의 종류HashMap - Key, value에서 null값을 허용한다. - 저장된 순서를 보장하지 않는다.key값의 소팅으로 저장됨( 저장된 순서를 유지하고 싶다면 Linked를 통해 구현된 것을 이용) - get, put에 대하여 일정한 시간의 성능을 제공한다 -> O(1) - 동기화 되어 있지 않다. [해쉬 분포와 해쉬 충돌 : https://d2.naver.com/helloworld/831311] HashTable - HashMap과 비슷하나 동기화 처리 되어있다(권장은 하지 않는다 concurrent된 것을 사용하자) TreeMap - 블랙 레드 트리에 기초(이진 트리가 편향되지 않도록 만드는 조건이 달림) - 순서가 보장되지 않는다. - 동기화 ..
자바의 특징을 다시금 공부해야함을 느꼈다. 먼저 인터페이스와 추상 클래스(abstract)의 차이점을 생각해보면 인터페이스 추상 클래스 implements(구현)을 함으로써 반드시 정의되어야 하는 메서드를 선언한다.다중 상속이 가능하다.추상 메서드뿐만 아니라 기본 메서드(default)도 가능( 버전 8이상)default와 public 외에 접근제한을 가지지 못한다.상수를 가질 수 있다. extends(상속)받음으로 반드시 정의되어야 하는 메소드를 선언한다.다중 상속이 불가능하다.기본 메서드(default)가 가능.protected, public을 사용할 수 있다.상수 외에 필드를 가질 수 있다. 내가 다시금 배우면서 중요하다 생각했던 부분은 다음과 같다. 추상 클래스는 접근 제한(protected)을 ..
인터페이스 설명 List 순서가 있음, 중복 허용 Set 순서가 없음, 중복 허용하지 않음 Map 순서가 없음, Key의 중복을 허용하지 않음. 이 프레임워크중에서 List의 구현체들을 알아보자. 1) ArrayList - 내부적으로 배열을 사용하여 요소들을 관리합니다.- 배열을 사용함으로 검색 속도가 좋다.- 값이 추가 혹은 삭제될 때 내부적으로 배열을 새로 만들어놓고 옮긴다.- 추가 및 삭제에 대하여 시간이 오래걸림. (ex. 총 5개의 요소 중 3번째 요소를 삭제하면 뒤에 부분을 다시 앞으로 옮기고 옮기고..) 2) LinkedList - 요소들끼리 링크를 통해 연결됨으로 삽입 삭제가 용이.(= 이중 연결리스트)- 검색에는 불리하다. ( 앞, 뒤로 계속 링크를 타고 가야함으로..) 3) Vector..
1. 제네릭이란 무엇이고, 왜 사용하는 걸까?? - 컬렉션, 람다식, 스트림 등 등 잘못된 타입이 들어오는 것을 방지 - API 도큐먼트에 자주 보인다.- *실행 시 타입 에러가 나는 것보다 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지- 컬렉션에서 elements를 가져올 때 항상 타입 변환을 해야하는데, 제네릭으로 타입을 한정 짓게 되면 타입 변환을 할 필요가 없이 고정적이기 때문에 프로그램의 성능이 향상된다. 2. Object로 쓰면 되지 않나요? Object를 쓰게 되면 위에서 언급했던 것과 같이 타입을 반환을 할 때 Object로 반환하기 때문에 이에 다시 타입을 강제 변환시켜야 한다. 때문에 타입 변환이 빈번해지면 전체 프로그램 성능에 좋지 못한 결과를 가져올 수 있다. 특히 자..
메이븐, 스프링 부트 cli 설치 후 이클립스에서 spring boot 프로젝트를 만들 때 났었던 에러입니다. Error ====================================================================================ArtifactTransferException: Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:3.0.2 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of..
1. 람다식이란 무엇인가? 자바에서 함수적 프로그래밍을 위해 자바 8부터 람다식을 지원하게 되었다. 람다식을 사용함으로써 코드가 매우 간결해지고, 필터링을 통해 결과를 쉽게 집계할 수 있게 되었다. 람다식은 ()->{....};의 형식으로 괄호안에는 매개변수가, 중괄호 안에는 실행코드가 들어가게 된다. 2. 람다식은 인터페이스 변수에 대입이 가능하다. 람다식은 기본적으로 인터페이스의 익명 구현 객체를 생성하게 된다. 하지만 모든 인터페이스에 대하여 사용할 수는 없다. 두 개 이상의 추상 메소드가 존재하는 인터페이스는 람다식을 이용하여 구현할 수 없다(오직 한 개의 메소드만 있는 인터페이스만 가능하다는 소리) 3. 람다식은 클래스의 필드 , 메소드 및 로컬 변수를 사용할 수 있다. 클래스의 필드나 메소드의..