Singleton은 객체 생성을 control 하기 위한 목적으로 사용됩니다. 객체의 갯수를 오직 하나로 제한하죠. 한개의 Singleton instance가 있으면 Singleton의 instance 필드들은 한개의 클래스에 한번만 발생하게 됩니다. Static 필드와 비슷하죠. Singleton은 종종 데이터베이스 커넥션이나 socket 연결 등에 사용 됩니다.
예를 들어 데이터베이스에 한개의 connection만 가능할 때 JDBC로 multithreading을 하다 보면 문제가 발생할 수 있습니다. 이 Singleton은 한번에 한개의 connection혹은 한개의 thread 만 만들어 지도록 관리를 할 수 있습니다.
**열거형 싱글톤 - 가장 좋은 방법
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
이 방법은 public 필드 방법과 기능적으로 동일하지만 더 간단하다. 그리고 복잡한 직렬화나 리플렉션(reflection) 상황에서도 직렬화가 자동으로 지원되고, 인스턴스가 여러 개 생기지 않도록 확실하게 보장해준다.
(1) 클래스 정의 자바 프로그램은 확장자가 “java”인 소스 파일을 하나 만들어서 자바 문법에 맞는 내용을 기술해야 한다. 자바는 클래스를 하나의 단위로 프로그램을 작성하기에 자바 소스 파일 안에 클래스를 정의해야 한다. 제대로 동작하려면 자바 소스 파일명이 클래스명과 동일해야 한다.
(2) main 메소드 정의 프로그램의 진입점이 다. 프로그램을 실행시키면 main 함수 내부에 기술된 내용들을 순차적으로 수행한다.
(2) main 메소드 정의 public static void main(String[] args) ❶ ❷ ❸ ❹ ❺ ❶ public : 누구나 접근 가능하도록 하기 위한 예약어로 접근 지정자의 일종이다. ❷ static : static으로 선언된 메소드는 클래스만 존재하면 수행할 수 있도록 한다. ❸ void : 값을 갖지 않는다는 의미를 갖는 자료형태이다 ❹ main •자바는 JVM에 의해서 실행되는데 자바 애플리케이션을 실행시키면 JVM은 이름이 main 메소드를 찾아 이 내부에 기술된 내용들을 순차적으로 실행한다. •그래서 main 메소드를 프로그램의 진입점이라고 한다. ❺ String[] args •메소드를 실행시키기 위한 재료가 될 만한 데이터를 전달받아야 할 경우 메소드_이름 다음에 기술하는 ( )을 사용한다. •( ) 안에 기술한 args가 메소드에 값을 전달했을 경우 이를 받아 올 수 있는 전달인자가 된다.
(3) 문장 main 메소드까지 정의했다면 이 메소드 안에 수행할 내용을 기술할 차례이다. 자바는 문장 단위로 프로그램을 작성해야 한다. 메소드 내부에 기술할 문장으로는 변수의 선언문이나 다른 메소드를 호출하는 문장들이 있다. JAM은 세미콜론으로 끝나면 이를 하나의 문장으로 인식한다. 반드시 문장의 끝을 세미콜론으로 마감해야 한다.
System.out.println("AAA"); 문장의 끝을 세미콜론(;) 으로 마감
(4) 출력을 위한 문장
위 문장은 화면에 "Hello Java"를 출력하라는 내용이다.
System.out.println 메소드는 ”(큰 따옴표)로 둘러싸인 문자열을 화면에 출력하는 역할을 한다
1991년 선사의 James Gosling에 의해 가전제품에 이용하기 위해 개발이 시작(Green Project-컴퓨터기술을 통합한 통합 리모콘.) 당시 WWW은 별로 알려지지 않았다. 초기에 개발된 언어를 Oak라 하였으며 전자기기의 내장된 프로그램을 위해 사용. Oak는 별로 관심을 끌지 못하였다 1994년 급격히 성장한 WWW에 자바를 적용 결정. 처음 등장한 것이 웹러너였으며 뜨거운 자바 즉 핫자바로 이름을 바꾸었다. 처음으로 공식 회의에서 웹 문서 안에서 실행되는 3D 분자 구조모형을 선보였다. 운영체제에 구해 받는 않는 프로그램을 작성할수 있었다.Gosling은 웹브라우저 안에서 실행되는 자바 프로그램을 작은 프로그램이라는 뜻에서 Applet이라 하였다. 1995년 5월 23일 넷스케이프 사의 브라우저가 자바 기술을 채택하게 되었다.
플랫폼 : Sun SPARC Solaris, Windows NT, Windows95, Linux Java beta1 발표(Sun Microsystems) Netscape 지원결정(1995) Java beta2 발표 JavaScript 발표(Sun & Netscape) 1996년 자바1.0 발표 Netscape2.0 자바 지원 2005년 자바 5.0 사용 2009년 자바6.0 사용 2010년 Oracle인수 자바 7.0사용
-자바 언어의 특징-
단순(simple) –자바는 C++ 언어를 기반으로 탄생하였지만, C나 C++에서 프로그래머에게 많은 혼란을 주는 요소들을 제거(예, 포인터, 구조체) 객체지향(Object-Oriented) –객체지향 프로그램을 작성하는데에 자바만한 언어가 없다는 것도 큰장점이다. 자바는 객체지향 개념을 쉽게 구현할 수 있도록 클래스와 상속을 지원하면서 C++와 달리 모든 프로그램이 클래스 안에서 구현되도록 규정되어 있으므로 진정한 객체지향 언어이다. 동적인 성능 확장 제공 –자바가 세상에 결정적인 인상을 준 것은 미리 설치 되지 않은 프로그램이 서버로 부터 동적으로 다운 로드 되어 웹 브라우저에서 실행할 수 있다는 것이다.
멀티쓰레드의 지원 –자바에서는 쓰레드라는 기능을 언어 차원에서 제공한다. 쓰레드란 프로그램안에서 독립적으로 실행되는 작은 실행단위라고 할 수 있다. 메모리의 공유가 가능하면서 프로그램이 보다 효율적으로 실행 될 수 있도록 해준다. 수행시간도 빠를 뿐더러, 요청에 응답하는 시간도 빨라짐을 알 수 있다. 자동 메모리 관리 –자바에서는 개발자가 메모리를 관리해 주지 않아도 된다. 왜냐하면, 자바가상머신이 자동으로 해제해 주기 때문이다. 따라서 개발자는 자기가 사용하고 싶을때로 사용하다가 그냥 두어도 자바가상머신이 자동으로 해체를 해준다(가비지컬렉션). –자바가상머신(Java Virtual Machine--JVM)이란? 인터프리터와 같은 자바 프로그램의 실행환경을 가상적인 운영체제라는 뜻에서 자바가상머신이라 한다.
인터프리터(Interpreted)에 의해 실행 –자바는 독특한 실행 방식을 취하고 있다. 자바 소스는 자바 가 상 머신에서 실행될 수 있는 바이트 코드로 번역되며, 번역된 바이트 코드는 바이트 코드 해석기가 있는 어떠한 기종의 컴퓨 터 환경에서도 실행될 수 있다.
자바 언어의 특징 (인터프리터)
- 독립성-
플랫폼의 독립성 –자바는 자바가상머신에서 실행되는 바이트코드를 사용함으로써 특정 컴퓨터에 종속되지 않는다. –자바는 한번 작성되면 JVM이 설치된 모든 종류의 컴퓨터에서 실행할 수 있다. –자바는 언어의 문법 뿐만 아니라 시스템 종속적인 부분까지도(int는 항상 32비트 등) 시스템 구조 중립적으로 설계되었다. 플랫폼의 독립성이란? –자바에 대한 특징을 언급할 때 항상 플랫폼의 독립성이란 말이 나오는데, 플랫폼이란 우리나라말로 하면 “운영체제”를 말하고 독립적이란 “상관없다” 라고 말한다. 즉, 운영체제에 상관없이 실행된다.
자바 언어의 장점
빨리 배울 수 있다 적은 코드로 프로그램을 작성 할 수 있다 좋은 품질의 프로그램을 작성할 수 있다 프로그램 개발을 빨리 할 수 있다 플랫폼에 독립적인 프로그램을 작성할 수 있다 분산 소프트웨어를 쉽게 작성할 수 있다