본문 바로가기

Language/Java

Java Garbage Collection 가비지 컬렉션Garbage Collection이란, 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블럭 혹은 개체를 찾아 자동적으로 다시 사용 가능한 자원으로 회수하는 것을 말한다. 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터Garbage Collector라고 하며, 최초의 가비지 컬렉터는 1958년에 존 매카시John McCarthy에 의해 리습Lisp 언어의 일부로 구현되었다. 가비지 컬렉션은 약자로 GC라고 부르기도 한다. 일반적인 가비지 컬렉터 알고리즘(Algorithm)은 다음과 같이 동작한다 1. 더 이상 프로그램에서 사용하지 않을 개체Object를 찾아낸다. 2. 해당 개체가 사용하는 리소스를 회수한다. 위치 : 힙 메모리 영역에 존재(JVM은 New/Young 영역과 O.. 더보기
Interface vs Abstract Interface 와 abstract * 공통점1) abstract와 interface는 그자체가 instance화 될수가 없다. 즉, TestInterface t = new TestInterface(), TestAbstract a = new TestAbstract(); 둘 다 컴파일을 해보면, 에러를 발생시킨다. 2) Prototype만 있고 Body가 없는 메소드를 멤버함수로 가진다. 소스1에서 보는 바와 같이 TestInterface, TestAbstract 는 함수 선언부는 존재하지만, 내용이 없는 함수들을 포함하고 있다. [소스1] public interface TestInterface { public static int num = 8; public void func1(); public void.. 더보기
중첩 클래스(Nested Class) [자바 4대 중첩 클래스] 자바 4대 중첩 클래스 1. 중첩 클래스 (Inner Class) □ 정의 - 하나의 클래스 내부에 또 다른 클래스가 내포되어 있는 상태. (클래스 관리의 효율을 높임.) □ 특징 - 중첩되는 클래스는 하나 이상 가능. - Outer 클래스 멤버를 Inner 클래스에서 사용 가능. - Outer 클래스에서 Inner 클래스 멤버 사용 불가능. (사용하고 싶으면 객체를 직접 발생 시켜야 함.) - 일반 중첩 클래스 내부에서는 static과 관련된 멤버를 선언할 수 없음. □ 형식 class Outer { 내용부; class Inner { 내용부; } } □ 중첩 클래스 객체 생성 Outer 객체1 = new Outer(); // Outer 클래스 객체 생성. Outer.Inner 객체2 = 객체1.new .. 더보기
JAVA 접근 제한자 (public, private, protected, default) 접근 제한자란?멤버들은 객체 자신들만의 속성이자 특징이므로 대외적으로 공개되는 것이 결코 좋은 것은 아닙니다.그런 이유로 프로그래머가 객체의 멤버들에게 접근 제한을 걸 수가 있는데 자바에서는 이를 접근 제한자라 합니다. 제한자 종류i) public : 모든 접근을 허용ii) protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용iii) default : 같은 패키지(폴더)에 있는 객체들만 허용iv) private : 현재 객체 내에서만 허용 접근제한자 사용- 클래스 : public, default- 생성자 : public, protected, default, private- 멤버변수 : public, protected, default, private- 멤버메소드 : public,.. 더보기
Java Reflection 개념 및 사용법 Java Reflection 정의 리플렉션이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법을 말한다. 투영, 반사 라는 사전적인 의미를 지니고 있다. 스프링을 공부하다가 보면 BeanFactory 라는 Spring Container 개념을 학습하게 된다.이 BeanFactory는 어플리케이션이 실행한 후 객체가 호출 될 당시 객체의 인스턴스를 생성하게 되는데 그 때 필요한 기술이 Reflection이다.자바는 스크립트 언어가 아닌 컴파일 언어이다. 물론 .java -> .class -> 실행이라는 2단계의 메커니즘을 가지고 있지만 컴파일 언어로 분리하는 게 옳다. 원래 자바에서는 동적으로 객체를 생성하는 기술이 없었다. 그리고 동적으로 인스턴스를 생성하는 Reflection으로 그 역활을 대신.. 더보기
JAVA ThreadLocal JAVA ThreadLocal란? 각각의 Thread에서만 사용되는 전역 변수를 만들어 주는 개념이다. 때문에 각각의 Thread마다 다른 값을 사용 할 수 있다.스레드에서 변수가 임의로 공유되는 상황을 막기 위해서 자주 사용이 된다. -private static으로 선언-set과 get메소드로 사용됨-싱글턴 구현, 프로임워크의 환경변수 공유등에 많이 사용. ThreadLocal 은 전역변수는 아니지만 전역 변수처럼 동작하기 때문에 코드의 재사용성을 떨어트리고 부작용을 유발할 수 있다. 스레드 내보의 값과 값을 가지고 있는 객체를 연결해 스레드 한정 기법을 적용할수 있도록 도와주는 형식적인 방법으로 ThreadLocal이 있다.이 ThreadLocal은 호출하는 스레드마다 다른 값을 사용할 수 있도록 관.. 더보기
Java Code Convention Java Code Convention 1 - Introduction1.1 Why Have Code Conventions다음은 프로그래머에게 코드 컨벤션(code convention)이 중요한 몇가지 이유이다. • 소프트웨어가 살아있는 동안(lifetime) 드는 비용의 80%는 유지보수에 소요된다. • 어떤 소프트웨어라도 원래의 저작자에 의해서 계속적으로 유지보수 되는 경우는 거의 없다.• 코드 컨벤션은 소프트웨어의 가독성을 향상시키고, 엔지니어가 새로운 코드를 좀더 빠르고 더욱 완벽하게 이해할 수 있게 한다. • 자신의 소스 코드를 상품으로 내놓으려면, 그것이 자신의 다른 상품처럼 잘 패키징되고 명료한지 확인할 필요가 있다. 2 - File Names2.1 File Suffixes자바 소프트웨어는 다음.. 더보기
PreparedStatement batch insert (JDBC) 웹개발하면서 DB의 사용은 필연적이기 때문에 java.sql.PreparedStatement의 사용은 필연적이다. Statement도 있기는 하지만 PreparedStatement는 한번 사용한 SQL문이저장되기 때문에 반복해서 사용할 경우 성능이 좋기 때문에 일반적으로는 PreparedStatement를 사용한다. ?123456StringBuffer sql = new StringBuffer(" INSERT INTO poll (col1, col2 ) VALUES (?, ?) "); psmt = conn.prepareStatement(sql.toString());psmt.setString(1, "test");psmt.setString(2, "test");psmt.executeUpdate(); 일반적으로 위.. 더보기