본문 바로가기

java10

자바 Exception 최근에 외부에 라이브러리와 API를 제공하는 작업을하다 느낀 자바 Exception에 대한 처리 방법을 정리한 글이다. 자바에는 원치않는 상황(에러 발생 상황, 예기치못한 값을 다뤄야하는 상황)을 다루기 위해 Exception이 있다. Exception은 잘 다루는것, 잘 이용하는 것 2가지 모두 중요하다고 생각한다. 우선 잘 다루는 것이란 다른 사람이 만든 라이브러리나, 메소드를 이용하려하는데 거기서 Exception이 발생했을시 어떤식으로 처리할지에 대한 것이다 다름으로 잘 이용하는 것은 라이브러리, 메소드를 직접 만들어서 다른사람에게 제공할 때 그곳에서 Exception을 던질것인지, 혹은 로직처리도중 Exception이 발생할 경우 이를 잡아서 에러코드를 만들것인지에 대한 것이다. 그럼 2가지를 .. 2021. 10. 9.
자바 Optional Optional Optional 이란? 자바 개발을 하다보면 항상 격는 문제중 하나는 nullPotinterException이다. 이 예외는 참조변수가 사용될때 참조하고 있는 것이 없이 null인 상태를 의미한다. public class Main { public static void main(String[] args) { Person person = new Person("jjang gu"); person=null; person.print(); } } 위 코드는 인위적으로 nullPointerException을 일으킨 것이다. 예제가 단순하지만 우리는 개발을 하다 보면 null값을 제대로 처리하지 않아서 에러를 일으키는 경우를 많이 보았을 것이다. 자바에서는 이런 null을 다루기 위해 Optional이라.. 2021. 5. 3.
Hashing 이번에는 위 영상을 보고 Hash에 대해 다시한번 복습하고자 글을 써본다. Hashing이란? Hashing 구조 Hash 간단 구현 1. Hashing란? 선요약 1.해싱은 자료를 저장하는 자료구조중 위치의 개념을 사용하지 않는 방법 2.자료를 Key,Value쌍으로 저장하고 Key만 있으면 자료를 찾는데 O(1)의 시간복잡도로 찾을 수 있다. 3.Key를 만들기 위해 해시함수가 존재 하며 해시함수의 성능에 따라 해싱의 효율이 달라진다. 4.Key를 만드는 해시함수를 잘만들어도 Key의 중복(충돌)이 일어날 수 있으니 대비를 잘해야한다.(체이닝) 우선 Hash는 컴퓨터에서 자료를 저장하는 컨테이너중 하나이다. 그런데 이 Hash는 여러 컨테이너들중(List,Queue,Stack...) 가장 컴퓨터를 이.. 2021. 2. 21.
JVM JVM jvm(java virtual machine)은 자바를 실행하는데 필수적인 것이다. 한글로 말하면 자바 가상 기계인데, 여기서 기계라는 말때문에 좀 다르게 이해할 수 있는데 여기서 기계는 컴퓨터에서 실행되는 프로그램으로 의미하면 편하다. 그렇기 때문에 jvm은 컴퓨터에서 자바 파일을 실행하기 위한 프로그램으로 생각하면 된다. JVM의 역할 JVM은 크게 2가지 역할을한다. 첫째, 자바 프로그램을 실행되는 기계에 관계없이 실행되도록 한다.(플랫폼 독립적) 둘째, 자바 프로그램이 실행되면서 메모리관리, 최적화등의 역할을 한다. 첫번째 역할을 보면 실행되는 플랫폼에 상관없이 실행되도록한다고 했는데 좀 더 풀어서 설명하면 우리가 작성한 자바 프로그램을 실행파일로 만든다음 이것을 배포하는 경우를 생각해보자.. 2021. 2. 14.
Iterator,Iterable 자바에서는 ArrayList,LinedList등 자료를 탐색할 수 있는 Collection이 존재한다. 하지만 이런 Collection들은 탐색방법을 우리가 임의로 정하지 못한다. 예를들어 총 10개가 저장돼있는 선형적 자료구조에서 짝수번째만 보고싶다하더라도 for,forEach를 통해 인덱스를 홀수번째라면 건너뛰고 확인해야 한다. public class Main { public static void main(String[] args) { ArrayList test=new ArrayList(); test.add("사과"); test.add("딸기"); test.add("오렌지"); test.add("포도"); test.add("참외"); test.add("파인애플"); for(int i=0;i 2021. 2. 13.
Thread-3 실행제어 동기화 이번글이 쓰레드의 마지막이면서 쓰레드의 가장 핵심적인 내용이다. 1. 실행제어 쓰레드는 실행시키고, 중단시키는일을 실행제어라고 한다. 쓰레드는 우리가 처리해야할 작업들을 병렬로 처리해야 할 때 사용하는데, 각 작업들의 실행을 중간에 중단시킨다던가, 아니면 중단 되었던 작업을 실행시키는것을 직접 제어해야 할 때가 있다. 이번에는 이렇게 직접 제어할 수 있는 쓰레드 메소드들을 알아보고 적당한 사용방법을 알아보겠다. 1-1 sleep 우선 쓰레드를 일시적으로 멈추는 sleep이 있다. public class Main { public static void main(String[] args) { Thread thread=new Thread(()->{ for(int i=0;i{ for(int i=0.. 2021. 2. 12.