개발언어/Java
-
Java Exception개발언어/Java 2020. 3. 16. 01:10
1. 개발자가 마주하는 Error 종류 Java의 Error에는 컴파일에러, 런타임에러, 논리적에러가 존재한다. 컴파일에러는 말 그대로 컴파일 과정에서 발생하는 에러이고, 런타임에러는 프로그램이 Run 중일때(Run-time) 발생하는 에러이다. 또한, 논리적 에러는 실제 정상적으로 코드가 잘 돌아가고 있지만, 개발자가 논리적으로 의도한 것과 다르게 동작하는 것을 의미한다. 2. Java의 Exception 우리는 여기서 분명하게 구분해야할 것이 있다. 바로 Error와 Exception이다. 우리는 보통 Exception을 예외처리라는 것으로 처리한다. 여기서 예외처리에서 예외(Exception)이라는 말은, 개발자가 예상 가능한 에러를 의미한다. 그리고 그 예상 가능한 것을 발생하지 않도록 처리하는 ..
-
예외 처리개발언어/Java 2020. 3. 15. 20:57
1. 예외(Exception)처리 방법 try { // 예외가 발생할 여지가 있는 코드영역 } catch (예외종류 참조변수) { // 예외가 발생하면 처리할 내용 } finally { // try-catch 블록이 끝나면 무조건 실행되는 영역 } 앞서 말했듯이, 예외는 예상 가능한 문제를 말한다. 그리고 우리는 위의 코드를 사용하여 예상 가능한 문제에 대한 대응을 할 수 있다. 위 코드에서 기억해야 할 점은, try 블록에서 예외가 발생하지 않으면 finally 블록만을 실행하고, try 블록에서 예외가 발생하면 catch 실행 후 finally 블록을 실행한다는 점이다. 아래의 예시를 보자. 위의 내용은 try-catch를 사용하지 않고 NullPointerException이 발생하는 코드인데, ar..
-
[Java 기초] Stream - 1개발언어/Java 2019. 5. 26. 22:04
0. 들어가기 전에. Java뿐만 아니라 C언어로 개발하면서, 그리고 OS 수업 등을 들을 때, Stream이라는 용어를 꽤나 접했던 것 같다. 그런데 지금껏 stream에 왜 stream이라는 단어가 쓰였는지 생각도 안해봤다. 그냥 외웠지.. 그런데 지금 생각해보니 stream은 영어 뜻 자체가 '흐름'이라는 말이고, 이것을 개발쪽으로 가져와서 생각해보면 '데이터가 흐르는 통로?'같은거라고 생각해볼 수 있을거같다. 그리고 이것을 염두해두고 Stream을 공부하면 좀 더 이해하기 쉬운거같다. 1. Stream? "컬렉션(배열 포함)에 저장된 데이터들을 하나씩 참조해서 람다로 처리할 수 있도록 해주는 반복자" (즉, 스트림은 컬렉션을 통로로 해서 데이터를 흘려보내고, 이것을 하나하나 처리하는 것을 의미한다..
-
[Java 기초] 멀티 스레드 - 1개발언어/Java 2019. 5. 13. 20:44
1. 멀티스레드란? 스레드(thread)는 본래 '실 가닥'을 뜻하는 용어이다. Java에서는 이것을 '한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어놓은 것'을 말한다. 즉, 스레드를 사용하면 여러개의 작업에 스레드를 줘서 스레드를 가진 작업들은 동시에 일을 처리할 수 있게 해주는 기법을 의미한다. 2. 작업스레드의 생성/실행 작업스레드는 Thread 클래스로부터 직접 생성하는 방법과 Thread 하위 클래스로부터 생성하는 두 가지 방법이 존재한다. 1) 직접생성 Thread는 java.lang.Thread 클래스를 통해 생성할 수 있는데, 작업 스레드 객체를 만들기 위해서는 아래 코드처럼 Runnable을 매개변수로 받는 생성자를 호출해야한다. Thread t1 = new Thre..
-
[번역] Java 8의 동시성(Concurrency)개발언어/Java 2019. 5. 1. 23:35
부제 : Java8의 lambda에서 가장 중요한 원자적 변수와 동시성Map 이 튜토리얼은 동시성 API의 핵심 개념인 Atomic Variables and Concurrent Maps 에 대해서 이야기하고자 합니다. 두 개념 모두 Java 8에서 람다를 설명하는데 있어서 정말 중요한 개념입니다. 1. AtomicInteger 패키지 java.concurrent.atomic은 원자적 연산을 수행하기 위해 여러 유용한 연산들을 포함하고 있습니다. 연산이 원자적이라는 것은 `synchronized` 키워드나 lock을 사용하지 않고도 멀티스레드로 병렬 연산을 안전하게 실행할 수 있을 때를 말합니다. 내부적으로, 원자적인 클래스들은 comapre of swap(CAS)라는 원자적 명령어를 빈번하게 사용합니다...