본문 바로가기

공부(~2016)/Java13

Java 8 인터페이스 The interface body can contain abstract methods, default methods, and static methods. An abstract method within an interface is followed by a semicolon, but no braces (an abstract method does not contain an implementation). Default methods are defined with the default modifier, and static methods with the static keyword. All abstract, default, and static methods in an interface are implicitly pu.. 2015. 10. 19.
Java - Enum enum을 제대로 써보고자 정리해본다 Enum 몇몇개의 상수들을 묶어서 관리하고 싶을 때. 연관된 상수들의 집합을 표현할때 사용한다.- 월, 화, 수, 목, 금, 토, 일- 남자, 여자- SKT, LGU+, KT enum은 C, C++ 등에 있던 개념인데, 자바에서는 JDK 1.5 버전에서 도입되었다. 자바에 enum이 도입되기 이전에는, 이러한 집합을 표현할 때 다음과 같이 public static final 변수를 이용하였다. public class TelecomCompany { public static final int SKT = 1; public static final int LG = 2; public static final int KT = 3; } public class Person { priv.. 2015. 8. 13.
[Java] java.lang.Object 클래스 java.lang.Object 클래스 public final void notify()이 객체 상에서 wait 하고 있는 쓰레드 중 한 개를 골라서 깨운다.현재의 쓰레드가 이 객체의 락을 가지고 있지 않은 경우(모니터를 소유하고 있지 않은 경우)는 실행시 java.lang.IllegalMonitorStateException이 통보된다. public final void notifyAll()이 객체 상에서 wait하고 있는 쓰레드를 전부 깨운다.현재의 쓰레드가 이 객체의 락을 가지고 있지 않은 경우(모니터를 소유하고 있지 않은 경우)는 실행시 java.lang.IllegalMonitorStateException이 통보된다. public final void wait() throw InterruptedExcept.. 2015. 1. 25.
[Java] Singleton 패턴 구현 예제 싱글톤 패턴클래스의 인스턴스가 반드시 딱 한 개만 생성됨을 보장하는 패턴- 클래스의 생성자를 private로 선언하여 외부에서 인스턴스를 생성하지 못하도록 방지함 -> 생성자가 private 이므로 상속이 불가능함- 클래스 내에 private static 변수로 자기 자신 클래스의 인스턴스를 가짐- 이 private static 변수를 리턴해주는 public static getInstance() 메소드를 가짐 * 이 포스팅에서는 Lazy 초기화를 이용한 예제만 다룬다. 필드 선언과 함께 초기화하는 것은 다루지 않음 첫 번째 예제 - Single Threaded Execution -> 문제 없음import java.util.Date; public class MySystem { private static M.. 2015. 1. 25.
[Java] Uncaught Exception Handler, Shutdown Hook 캐치되지 않는 예외의 핸들러 (Uncaught Exception Handler) 프로그램이 예외를 통보했을 때 그 예외를 캐치하는 try-catch절이 어디에도 적혀있지 않다고 하자. 이런 경우에는 일반적으로 쓰레드의 call stack을 표시하고 프로그램이 종료된다. Thread 클래스의 static 메소드인 setDefaultUncaughtExceptionHandler 메소드를 사용하면 캐치되지 않는 예외의 핸들러를 설정할 수 있다. 핸들러는 Thread.UncaughtExceptionHandler 인터페이스의 객체로서 표현하고, 실제 처리는 uncaughtException 메소드에 기술한다. 이렇게 핸들러를 설정하면 종료할 때 call stack이 표시되지 않고 프로그램이 종료된다. Shutdown.. 2015. 1. 19.
[Java] 인터럽트 상태와 InterruptedException의 상호 변환 인터럽트 상태와 InterruptedException의 상호 변환interrupt() 메소드를 호출하면 쓰레드에 인터럽트를 걸 수 있다. 이러한 행위는 다음 중 어느 하나의 결과를 낳는다.1) 쓰레드가 '인터럽트 상태'가 된다 -> '상태'에 반영2) InterruptedException이 통보된다 -> '제어'에 반영 일반적으로는 1)이 되지만, 쓰레드가 sleep/wait/join 하고 있는 경우에는 2)가 된다. (그리고 2의 경우에는 '인터럽트 상태'가 되지 않는다.) 그런데 이 1)과 2)는 상호 변환이 가능하다. 인터럽트 상태 -> InterruptedException으로 변환if (Thread.interrupted()) { throw new InterruptedException(); }- 이.. 2015. 1. 19.
[Java] 동기화 / synchronized, volatile, final 먼저, 동기화가 제대로 이루어지지 않아서 문제가 생기는 경우를 살펴보자. reorder - reorder란, 최적화를 위해 컴파일러나 JVM이 프로그램의 처리 순서를 바꾸는 것을 말한다. - 프로그램의 수행 능력을 높이기 위해 널리 사용되고 있지만, 그 사실을 프로그래머가 의식하기는 어렵다. 실제 싱글 쓰레드 프로그램에서는 reorder가 이뤄지고 있는지 판단할 수 없다. reorder시에 예기치 못한 작동을 막기 위한 제약이 따르기 때문이다. (사실 싱글 쓰레드 프로그램에서는 reorder로 인한 동시성 문제가 일어나지 않는다.) - 그러나 멀티 쓰레드 프로그램에서는 reorder가 원인이 되어 예기치 못한 작동을 하는 경우가 있다. class Something { private int x = 0; p.. 2015. 1. 19.
[Java] java.util.concurrent.CountDownLatch, java.util.concurrent.CyclicBarrier 클래스 java.util.concurrent.CountDownLatch 클래스, java.util.concurrent.CyclicBarrier 클래스는 여러개의 쓰레드를 동기시킬 때 사용하면 편리하다. java.util.concurrent.CountDownLatch 클래스 어떤 쓰레드가 지정한 쓰레드가 종료되기를 기다릴 때에는 java.lang.Thread 클래스의 join 메소드를 이용한다. 하지만 join 메소드로 기다리는 것이 가능한 것은 '쓰레드의 종료'라고 하는 단 한 번의 액션뿐이다. 따라서 '지정한 횟수만큼 어떠한 액션이 일어나는 것을 기다린다'라는 것은 불가능하다. java.util.concurrent.CountDownLatch 클래스를 사용하면 '지정한 횟수만큼 countdown 메소드가 호출되.. 2015. 1. 19.
[Java] 제네릭 제네릭을 사용한 코드는 사용하지 않은 코드에 비해 직관적이고 안전할 수 밖에 없다.제네릭은 타입을 정의하는데 있어 안전장치와 같다.개발자의 실수로 인한 런타임 오류를 방지할 수 있다. -> 컴파일 에러로 변환되므로그리고 자바 내부적으로도 제네릭을 적용한 것이 적용하지 않은 것보다 성능적으로 좀더 좋다. 2014. 12. 3.
객체지향 / 절차지향 / 정보은닉 / 캡슐화 / 모듈화 절차지향 : C언어 - 데이터와, 그들을 조작하는 절차가 구분됨. - 데이터를 중심으로, 각 함수들이 데이터를 조작하고 사용함 - 하나의 데이터 type에 변화가 생기면? 많은 함수를 수정해야 할 것임 객체지향 : C++, Java 등등 - 객체 : 명백한 한계와 의미를 가지는 사물/개념을 추상화 한 것. 애트리뷰트+메소드 - 객체(데이터, 기능을 모두 포함)들이 서로 메시지를 주고 받으며 협업함 - 하나의 데이터 type에 변화가 생기면? 해당 객체만 수정하면 될 것임, 다른 객체들에는 영향이 가지 않음 - 추상화, 캡슐화, 모듈화, 재사용성, 계층성, 상속성, 다형성(같은 메시지에 대해 다르게 반응하는 것) 정보은닉 / 캡슐화 - 객체간에 데이터를 주고받기 보다는, 기능을 실행해달라고 요청함 - 외부.. 2014. 8. 7.
Java 이름 재사용 - 오버라이딩 / 하이딩 / 섀도윙 / 모호화 오버라이딩 (overriding) 자식 클래스에 있는 인스턴스 메서드가 부모 클래스의 접근 가능한 메서드와 동일한 이름과 매개변수를 가지는 것. 오버라이딩 되면 동적 바인딩이 가능해짐. 따라서 JVM은 실행중에 인스턴스의 자료형에 기반하여 호출알 메서드를 결정함. 하이딩 (hiding) class Parent { public static void f() { } } class Child extends Parent { public static void f() { } // Parent.f()를 하이딩함 } 부모클래스의 필드, static 메서드, 클래스, 인터페이스와 동일한 이름으로 자식 클래스에도 요소를 생성하면, 자식에서 만든 요소가 부모에 있는 요소를 하이딩한다. 이처럼 하이딩을 사용하면 부모 클래스의 .. 2014. 4. 5.
Simple CSV Reader - 자바 CSV 파일 읽기 import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; /** * Created by soy */ public class CSVReader { List〈person〉 personList = readPersonFromCSV("person.csv"); private List〈person〉 readPersonFromCSV(String fileName).. 2013. 8. 15.
Checked Exception / Uncheked Exception (RuntimeException) Checked Exception Exception을 상속한 클래스는 try-catch, throws 등으로 예외처리를 해주어야 한다. 처리를 해주지 않으면 컴파일시 에러가 발생한다. Unchecked Exception (RuntimeException) 반면 RuntimeException을 상속한 클래스는 예외처리가 필수가 아니다. -> ArithmeticException, IllegalArgumentException, IndexOutOfBoundsException 코드에서 미리 예외조건을 처리하게 만든다면 피할 수 있으나, 개발자가 부주의하게 코딩한 경우에 발생할 수 있는 종류의 예외들이다. http://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeExcep.. 2013. 4. 24.