본문 바로가기

자바

(25)
[자바] Effective Java 2/E 발 행: 2014년 9월 1일지은이: 조슈아 블로크(Joshua Bloch) 머리말 내용 일부 발췌: 프로그래밍 언어를 잘 사용한다는 것은 무엇일까요? 일단 언어의 핵심을 이해해야 합니다. 알고리즘적 언어인가, 함수형 언어인가, 객체 지향언어인가? 어휘도 알아야 합니다. 표준 라이브러리에 어떤 자료 구조와, 연산과, 기능이 포함되어 있는가? 그런 다음에는 코드 구조를 만드는 관례와 효과적 용법을 이해해야 합니다. 프로그래밍 서적들 상당수는 앞 두 가지에만 신경을 쓰며, 코딩 관례와 효과적 용법은 잠깐씩만 설명하고 넘어갑니다. 문법과 어휘는 언어에 고유한 속성이지만, 용례는 그 언어를 사용하는 커뮤니티의 특성입니다. 예를 들어 자바(Java)는 단일 계승(Single inheritance)만 지원하는 객체..
[자바] 자바 메모리 구조 자바 메모리 구조 메모리 구조를 정확히 이해하면, 같은 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우돼며, 메모리 관리가 되지 않을 경우 속도저하 현상이나 튕김 현상이 일어날 수 있습니다. 또한 한정된 메모리를 효율적으로 사용하여 최고의 성능을 낼 수 있습니다. 다음은 자바 프로그램의 실행 구조입니다. 프로그램이 실행되기 위해서 windows나 linux같은 운영체제(OS)가 제어하고 있는 시스템의 리소스의 일부인 메모리(RAM:주기억장치)를 제어할 수 있어야 하는데, java 이전의 c같은 언어로 만들어진 프로그램은 이런 이유등으로 OS에 종속되어 실행됩니다. 반면, java 프로그램은 JVM(Java Virtual Machine) 이라는 프로그램만 있으면 실행이 가능하며, JVM이 OS에게서..
[JSP] 적절한 include 사용하기 일반적으로 JSP에서 소요되는 시간은 많지 않습니다. JSP가 가장 처음에 호출되는 경우에만 시간이 소요되고, 그 이후의 시간에는 컴파일된 서블릿 클래스가 수행되기 때문입니다. 그럼 JSP의 라이프 사이클을 간단하게 리뷰해 보면 다음과 같습니다. JSP의 라이프 사이클은 다음의 단계를 거칩니다. 여기서 해당 JSP 페이지가 이미 컴파일되어 있고, 클래스가 로드되어 있고, JSP 파일이 변경되지 않았다면, 가장 시간이 많이 소요되는 페이지 번역, JSP 페이지 컴파일, 클래스 로드, 인스턴스가 생성되는 과정을 생략되고 JSP URL이 호출되면 바로 인스턴스가 생성되어 바로 jspInit 메소드가 호출되는 방식으로 흐름이 이어집니다. 서버의 종류에 따라서 서버가 기동될 때 컴파일을 미리 수행하는 Pre-co..
[자바성능] 클래스 정보와 reflection Reflection 관련 클래스들 자바 API에는 reflection이라는 패키지가 있습니다. 이 패키지에 있는 클래스들을 써서 JVM에 로딩되어 있는 있는 클래스와 메소드 정보를 읽어 올 수 있습니다. 주요 클래스로 어떤 것들이 있으며, 각 클래스에서 제공되는 메소드들은 아래와 같습니다. Class 클래스 Class 클래스는 클래스에 대한 정보를 얻기에 좋은 클래스입니다. Class 클래스는 생성자가 따로 없습니다. ClassLoader 클래스의 defineClass() 메소드를 이용해서 클래스 객체를 만들 수도 있지만, 좋은 방법은 아닙니다. Object 클래스에 있는 getClass() 메소드를 이용하는 것이 일반적입니다. String getName(): 클래스의 이름을 리턴한다. Package g..
[자바성능] static의 올바른 사용 static에는 static 초기화 블럭이라는 것이 있습니다. static 초기화 블록은 위와 같이 클래스 어느 곳에나 지정할 수 있습니다. 이 static 블록은 클래스가 최초 로딩될 때 수행되므로 생성자 실행과 상관없이 수행됩니다. 위의 코드처럼 사용했을 때, staticVal의 값은 마지막에 지정한 값이 됩니다. static 블록은 순차적으로 읽혀집니다. package com.perf.statics; public class StaticBasicSample2 { static String staticVal; static { staticVal = "Static Value"; staticVal = StaticBasicSample.staticInt + ""; } public static void main(S..