본문 바로가기

프로그래밍/Java3

익명 클래스(Anonymous Class) 정의 InnerClass의 한 종류로 이름이 없는 객체를 만들 수 있다. 익명 클래스를 사용하는 가장 큰 목적은 부모 클래스를 상속받는 서브 클래스를 생성하지 않고도, 단일 객체를 만들어서 부모 클래스에 정의된 동작에서 행위를 추가할 수 있다는 것이다. 익명 클래스는 그래픽 프로그래밍을 할 때 리스너 인터페이스를 만들 때 유용하다. 익명 클래스는 클래스와 인터페이스로부터 만들 수 있다. 익명 클래스를 사용하지 않은 예제 interface Age { int age = 29; void getAge(); } class MyClass implements Age { @Override public void getAge() { System.out.print("Age is "+age); } } class Anonymo.. 2019. 7. 21.
String vs StringBuffer vs StringBuilder 기술면접을 볼 때 만약 지원자가 Java언어를 할 줄 안다면, 빠지지 않고 나오는 단골 문제인것 같다. 이 참에 정리해준다. 1.String -String instance는 character의 배열이며, immutable하기 때문에 생성이 되고 나면 변경할 수 없다. '+'를 써서 변경하는 경우는 다시 생성하는것이다. 2.StringBuffer -멀티 쓰레드 환경에서 사용할 수 있으며, String과 같지만 변경이 가능한 character의 배열 모음이다. -StringBuffer의 메소드들은 synchronized 되어있으며 이로 인해 멀티 쓰레드 환경에서 safe하다.-JDK5에서는 StringBuffer와 똑같이 동작하지만 Single Thread에 더 적합한 StringBuilder가 생겼다. s.. 2019. 2. 16.
자바의 NIO 기존의 자바I/O 는 느리다는 편견이 존재했다. Blocking 방식 때문이었을까. FileReaderPrintReaderFileWriterPrintWriter위와 같은 클래스는 쓰기 어려움은 없이 I/O 작업은 할 수 있었지만, 커널 버퍼를 직접 접근하는 Direct Buffer를 핸들링 할 수 없었다. 소켓이나 파일에서 Stream이 들어오면 커널 버퍼에 쓰여지게 되는데, 자바 코드에서 이를 접근할 수가 없었기 때문. 커널에서 JVM 내부로 옮겨와야 하는 오버헤드로 인해 속도 이슈가 있었다. 세부적인 이유는JVM 내부로 복사할 때 CPU 사용(디스크에서 커널버퍼로 복사하는 과정은 CPU가 하지 않고 DMA가 해준다.) 복사 Buffer 사용 후 GC를 통해 정리(GC의 대상이 된다.)쓰레드 Block.. 2018. 12. 5.