Post List

태그

2018년 8월 25일 토요일

자바 이벤트(Event)

이벤트(Event)

사용자가 프로그램 코드에 의하여 발생할 수 있는 object를 Event가 발생한 인스턴스를 이벤트 소스(Event Sources), Event가 발생했을 때 발생한 Event를 처리해주는 것을 이벤트 핸들러(Event Handlers)라고 함


ActionEvent
버튼, 리스트, 메뉴 등의 컴포넌트가 눌리거나 선택이 되었을 때 발생하는 이벤트

AdjustmentEvent
스크롤 바와 같은 조정 가능한 컴포넌트에서 조정이 일어나면 발생하는 이벤트

ComponentEvent
컴포넌트의 모습이나 이동, 크기가 변화될 때 발생하는 이벤트

ItemEvent
리스트와 같은 선택항목이 있는 컴포넌트에서 선택항목이 선택될 때 발생하는 이벤트

TextEvent
텍스트 컴포넌트에서 값이 입력될 때 발생하는 이벤트

ContainerEvent
컨테이너에 컴포넌트가 추가되거나 제거될 때 발생하는 이벤트

FocusEvent
컴포넌트에 초점(Focus)이 들어올 때 발생하는 이벤트

PaintEvent
컴포넌트가 그려져야할 때 발생하는 이벤트

WindowEvent
윈도우가 활성화되거나 비활성화될 때, 최소, 최대, 종료될 때 발생하는 이벤트

KeyEvent
키보드로부터 입력될 때 발생하는 이벤트

MouseEvent
마우스가 눌려지거나 움직일 때, 마우스 커서가 컴포넌트 영역에 들어가거나 벗어날 때 발생하는 이벤트


이벤트(Event) 구조와 리스너
자바는 GUI를 표시하는 클래스와는 별도로 새 클래스를 만들어서 이벤트의 처리를 맡기는 방법인 위임형 이벤트 모델 (Delegation Event Model)을 사용
Delegation(위임) 방식에서는 이벤트를 처리할 클래스를 만들고, 그 클래스를 이벤트를 발생 시키는 컴포넌트에 등록하기만 하면 됨. 이때 이벤트처리를 위해 등록되는 클래스를 리스너(listener)라고 함

리스너 인터페이스의 특징
- 하나의 컴포넌트에 하나, 혹은 여러 개의 리스너를 등록할 수 있음
- 리스너는 반드시 event handler(실제로 event를 처리하는 method)를 구현해야 함
- 컴포넌트에 등록된 리스너가 없으면, 그 컴포넌트의 이벤트는 무시됨
 -리스너는 해당 이벤트를 처리하기 위해 그 이벤트에 해당하는 interface를 implement하면 됨





2018년 8월 22일 수요일

자바 컴포넌트

컴포넌트
AWT component들은 color나 font 등을 최적화하여 원하는 모양을 갖출 수 있도록 기능을 제공하며, 기본적으로 제공하는 컴포넌트들은 Button,Canvas, Checkbox,Choice, Lable, List, Scrollbar 등이 있음

Button
Button은 마우스로 클릭해서 작동시킬 수 있는 컴포넌트

Checkbox
Checkbox는 사용자가 선택 표시를 할 수 있는 두 가지 상태를 가진 클래스
목록에 체크된 상태가 true , 체크 되지 않은 상태는 false로 값을 가짐

CheckboxGroup - Radio Button
Checkbox가 CheckboxGroup과 사용될 때 라디오 버튼으로 사용
Checkbox는 개별적으로 선택할 수 있는 버튼인데 비해, 라디오 버튼은 체크박스그룹 내 에서 한 버튼만 선택됨

Choice
사용자가 아이템을 고를 수 있도록 목록을 드롭다운 할 수 있는 컴포넌트

Label
단순히 문자열을 나타내는 컴포넌트
사용자에게 메시지를 전달하기 위해 사용
사용자 입력을 받지 않으며 이벤트 또한 발생하지 않음

Text Components
TextField와 TextArea 모두 TextComponent 클래스의 후손 클래스임
TextField : 한줄만 쓸 수 있는 텍스트영역를 구현하는 클래스
TextArea : 여러 줄에 걸쳐 문서를 작성할 수 있는 컴포넌트 클래스
TextField와 TextArea 모두 화면에 표시되는 실제 크기는 layout manager에 따라 달라짐


List
여러 개의 항목들 중에서 하나 혹은 여러 개를 선택할 수 있는 컴포넌트 클래스

Scrollbar
가로 또는 세로의 형태의 스크롤 바를 만들 때 사용되는 클래스

메뉴
사용자가 프로그램의 기능을 선택할 수 있도록 해주는 기능을 가지고 있는 컴포넌트
메뉴의 구성
MeunBar : 메뉴를 올려 놓을 수 있는 메뉴바를 만들 때 사용
Menu : 메뉴 바에 올려 놓을 수 있는 메뉴를 만들때 사용
MenuItem : 메뉴의 하위 메뉴를 만들 때 사용
CheckboxMemyItem : 체크 박스가 들어 있는 메뉴 아이템을 만들 때 사용
PopupMune : 동적으로 표현할 수 있는 메뉴를 만들 때 사용

자바 배치 관리자(Layout Manager)

배치 관리자(Layout Manager)
컨테이너에 포함되는 컴포넌트들의 위치와 크기를 관리하는 클래스임
자바에서 제공하는 기본적인 배치 관리자(layout manager)는 FlowLayout ,BorderLayout , GridLayout, CardLayout, GridBagLayout 등이 있음

FlowLayout
panel의 기본 레이아웃으로 기본적으로 컴포넌트들을 한 줄에서 왼쪽에서 오른쪽으로 배치해 나가며, 줄이 넘치면 다음 줄로 넘어가도록 배치를 함

BorderLayout Manager
Window 계열 컨테이너인 프레임에 기본적으로 제공되는 배치 관리자로 컨테이너의 크기를 사용자가 변경시켰을 때 각 컴포넌트의 상대적인 위치는 변하지 않고, 크기만 변하는 레이아웃임

GridLayout
컨테이너를 동일한 크기의 격자(grid)로 나누고 그 안에 각 컴포넌트를 표시하는 클래스

CardLayout Manager
하나의 화면에 계층적 구조를 만들어서, 마치 card를 쌓아 놓은 듯한 기능을 할 수 있게 하는 클래스

GridBagLayout Manager
Component가 들어가는 각 격자에 대한 여러 가지 크기 및 모양 데이터를 GridBagConstraints라는 별도의 클래스를 이용하여 프로그래머가 직접 설정할 수 있는 클래스

자바 컨테이너(Container)

컨테이너(Container)
컨테이너는 컴포넌트의 후손 클래스로 다른 컨테이너나 컴포넌트를 포함할 수 있는 기능을 가지는 클래스임

컨테이너의 종류
Window : 다른 컨테이너에 포함시키지 않고 하나의 윈도우를 만들 수 있는 컴포넌트를 말하며 자체적으로 사용되진 않고 후손클래스인 Dialog와 Frame 컨테이너가 사용됨

Frame : 다른 컨테이너를 포함하며 애플리케이션에 사용된다. 최상위 컨테이너가 되며 GUI 프로그램을 작성하기 위해서는 프레임을 사용해야 됨

Dialog : Frame이나, 다른 Dialog에 종속되는 윈도우를 말하며 대화창에 사용됨

panel : 다른 컴포넌트를 포함할 수 있는 컨테이너로 일부 영역을 컨트롤하는 데 사용함

Applet : 웹 브라우저 또는 Applet 뷰어를 통해 결과를 확인함

자바 AWT

AWT
Abstract Window Toolkit의 약자
자바 프로그램이 수행되는 어떤 운영체제에서든지 수행되며 그래픽을 이용하여 사용자와 프로그램 간의 상호작용을 할 수 있도록 해주는 인터페이스인 GUI를 의미함

AWT의 컴포넌트
자바 프로그램에서 사용자 인터페이스를 구축하기 위해 사용하는 요소로 java.awt.Component와 java.awt.MenuComponent를 상속받아 사용됨
컴포넌트는 크게 다음과 같이 세 가지로 세분화할 수 있음

비주얼 컴포넌트 (Visual Component) : 버튼과 같이 컨테이너에 들어갈 수 있는 컴포넌트(Button,TextField, Checkbox, List, Radio, TextArea등 )

컨테이너 컴포넌트(Container Component) : 다른 컴포넌트를 포함할 수 있는 컴포넌트 (Frame , panel 등 )

메뉴 컴포넌트(Menu Component) : 컨테이너에 메뉴를 구성하는 메뉴 관련 컴포넌트(MenuBar, Menu, MenuItem, CheckboxItem, PopupMenu 등)

자바 SimpleDateFormat 클래스

SimpleDateFormat 클래스

SimpleDateFormat 클래스는 Java.text 패키지에 존재하는 클래스로 생성자 또는 메소드의 지정된 속성을 통해서 날짜와 시간 출력 서식을 구현하는 클래스임

자바 Random 클래스

Random 클래스

java.util.Random 클래스 객체는 일련의 난수를 생성하는 클래스로 생성된 객체를 통해 int형 float형 등의 난수가 발생 가능하며 정수형 난수 발생은 특정 범위가 없다. 하지만 부동소수점을 가지는 실수형들의 난수는 0.0에서 1.0 사이의 값을 받게 되어 있음

자바 Calendar 클래스

Calendar 클래스

자바의 java.util 패키지에서는 자료 관리를 구현하는 클래스들과 날짜, 출력 포맷 등의 프로그램에서 유용하게 사용할 수 있는 클래스들을 제공함

java.util.Calendar 클래스는 날짜와 시간을 객체 모델링 화한 클래스로 년, 월, 일, 요일, 시, 분, 초까지의 시간과 날짜와 관련된 정보를 제공한다. Calendar 클래스는 1970년 1월 1일부터 특정 값으로 진보해 오면서 날짜와 시각에 대한 조작을 수행할 수 있도록 제공되는 추상 클래스임

자바 컬렉션

자바의 컬렉션
자바에서는 자료 관리를 컬렉션으로 정의하며 자료 관리하는 목적에 따른 클래스들을 java.util 패키지에서 제공함

자료구조의 특징
효율성(Efficiency) - 상황에 맞는 알고리즘을 사용하여 자료를 구조화시키기 때문에 효율적으로 동작함 - 상황에 맞는 적절한 자료구조를 이용하게 되면 데이터 처리의 효율을 높일 수 있음
추상화(Abstraction) - 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것 - 자료구조의 추상화는 실제 구현한 언어가 무엇인지에 따라 실제 그 코드는 다르지만, 추상적인 개념에 대해서만 알고 있으면 되기 때문에 언어에 종속적이지 않다는 특징을 가짐

자바에서는 자료 관리를 컬렉션으로 정의하며 자료 관리하는 목적에 따른 클래스들을 java.util 패키지에서 제공함

 재사용성(Reusability) - 자료구조를 이용하여 데이터를 처리할 경우 해당 자료구조의 인터페이스만 이용하여 데이터를 처리하도록 하므로 모듈화가 가능함 - 이는 자료구조를 설계할 때 특정 프로그램에 맞추어 설계하지 않고 다양한 프로그램에서 사용될 수 있도록 범용화하여 설계함으로써 가능함

자바 GENERIC

제너릭
JDK5.0부터는 제너릭(GENERIC)이 포함되어 실행 전 컴파일 단계에서 특정 컬렉션에 프로그래머가 원하는 객체 타입을 명시하여 명시된 객체가 아니면 절대로 저장될 수 없게 구성됨


제너릭을 선언하는 방법
Generic Type은 <> 사이에 컴파일할 당시 사용될 객체를 적어 놓으면 객체를 저장할 때 제너릭 타입으로 저장
먼저 클래스 선언부의 클래스명 뒤에 전달받을 타입의 수만 큼 ','로 구분하여 <K, V>와 같은 형태로 선언

2018년 8월 21일 화요일

자바 Character 클래스

Character 클래스
 char를 클래스로 변환한 것

중요 메소드
public static boolean isDigit(char ch) - ch가 유니코드인지 true, false로 리턴함
public static boolean isLetter(char ch) - ch가 숫자인지 true, false로 리턴 함
public static boolean isLetterOrDigit(char ch) - ch가 문자인지 true, false로 리턴 함
public static boolean isLowerCase(char ch) - ch가 문자·숫자인지 true, false로 리턴함
public static boolean isSpace(char ch) - ch가 소문자인지 true, false로 리턴 함
public static boolean isUpperCase(char ch) - ch가 공백인지 true, false로 리턴 함
public static char toLowerCase(char ch) - ch가 대문자인지 true, false로 리턴 함
public static char toUpperCase(char ch) - ch를 소문자로 리턴 함
public static char toUpperCase(char ch) - ch를 대문자로 리턴 함

자바 Integer 클래스

Integer 클래스
 자바의 기본 자료형 중 int를 클래스로 제공하는 것

주요메소드
public byte byteValue( ) - 객체의 값을 byte 형으로 리턴 함
public double doubleValue( ) - 객체의 값을 double 형으로 리턴 함
public float floatValue( ) - 객체의 값을 float 형으로 리턴 함
public int intValue( ) - 객체의 값을 int 형으로 리턴 함
public long longValue( ) - 객체의 값을 long 형으로 리턴 함
public short shortValue( ) - 객체의 값을 short 형으로 리턴 함

자바 래퍼 클래스(Wrapper class)

래퍼 클래스(Wrapper class)

자바에서는 자바의 기본 자료형을 클래스로 정의하여 객체 단위로 처리할 수 있도록 제공하는 클래스

자바의 기본 자료형인 byte, short, int, long, float, double, char, boolean형에 대응하는 Byte, Short, Integer, Long, Float, Double, Character, Boolean의 Wrapper 클래스 및 큰 숫자를 다루기 위한 java.math.BigInteger와 java.math.BigDecimal 클래스를 제공

자바 오브젝트(Object) 클래스

오브젝트(Object) 클래스
모든 클래스의 최상위 클래스인 Object는 모든 객체의 타입이 됨
모든 클래스가 Object 후손 클래스이기 때문에 Object가 가진 메소드를 재정의해서 필요에 따라 사용하게 됨


오브젝트(Object) 클래스 주요 메소드
Object 클래스의 주요 메소드는 다음과 같음

protected Object clone( ) - 객체 자신의 복사본을 리턴함
public boolean equals(Object obj) - 객체 자신과 객체 obj가 같은 객체인지 확인하고 알려줌(같으면 true)
protedcted void finalize( ) - 객체가 소멸할 때 가비지 컬렉터에 의해 자동으로 호출되며 수행되어야 하는 코드가 있는 경우에만 오버라이딩함
pubilc class getClass( ) - 객체 자신의 클래스 정보를 담고 있는 Class) 인스턴스를 리턴함
public int hasCode( ) - 객체 자신의 해시 코드를 리턴함
public int hasCode( ) - 객체 자신의 해시 코드를 리턴함
public String toString( ) - 객체 자신의 정보를 문자열로 리턴
public void notify( ) - 객체 자신을 사용하려고 기다리는 스레드를 하나만 깨움
public void notifyAll( ) - 객체 자신을 사용하려고 기다리는 모든 스레드를 깨움
public void wait( ) - 다른 스레드가 notify( )나 notifyAll( )을 호출할 때까지 현재 스레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 함

2018년 8월 19일 일요일

자바 인터페이스(Interface)

자바 인터페이스(Interface)

1) 인터페이스
인터페이스란 구체적인 코드의 구현 없이 객체가 가지고 있어야 하는 기능만을 명시한 클래스를 말함

2) 인터페이스의 특징
공개형 상수인 static final과 선언 메소드인 추상 메소드만 선언해서 모든 하위 클래스 및 인터페이스들이 정의하도록 구현된 원형임
멤버의 public를 default로 가지며 객체 생성할 수 없음
인터페이스는 다중 상속을 허용함
인터페이스와 인터페이스 간의 상속은 extends를 사용하며 클래스와 인터페이스 간의 상속은 implements키워드를 사용함
인터페이스를 상속받은 클래스가 추상 메소드를 정의하지 않으면 후손은 추상 클래스가 됨

자바 추상 클래스(Abstract Class)

자바 추상 클래스(Abstract Class)

1) 추상 클래스의 개념과 특징
일반적인 처리 내용은 같으나 데이터 또는 실행환경에 따라 구체적인 처리내용이 조금 다른 경우 상위 클래스에서는 일반적인 처리절차에 대한 메소드를 선언만 하고 하위 클래스에서 구체적인 처리를 하도록 하는 방법으로 서브 타입핑의 원형을 가짐

2) 추상 클래스의 특징
abstract로 선언된 추상 클래스는 객체를 생성할 수 없음
abstract는 실체가 없다는 뜻이기 때문에 변수에 사용될 수 없음
abstract로 선언한 메소드는 구현 코드를 갖지 않고 선언만 할 수 있음
추상 메소드를 하나라도 포함한 클래스는 추상 클래스가 됨
추상 클래스의 추상 메소드에는 선언부만 있기 때문에 이를 상속한 후손 클래스에서는 반시 재정의하여야 함
추상 클래스의 추상 메소드를 재정의하지 않는 후손 클래스는 추상 클래스가 됨
추상 클래스는 객체 생성해서 인스턴스화 될 수는 없지만, 레퍼런스(reference) 변수로는 사용될 수 있음


3) 동적 바인딩과 정적 바인딩
동적 바인딩 : 실행 시간 중에 일어나거나 실행과정에서 변경될 수 있는 바인딩
정적 바인딩 : 실행 시간 전에 일어나 변화하지 않는 바인딩

자바 다형성(Polymorphism)

자바 다형성(Polymorphism)


1) 다형성
다형성이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩이나 오버로딩을 의미함

2) 다형성의 특징
여러 개의 클래스가 같은 메소드에 대하여 서로 다른 각자의 방법으로 작동할 수 있도록 하는 설계를 가짐
하나의 데이터 유형의 변수로 여러 유형의 객체 참조가 가능함
변수가 참조하는 객체의 유형에 맞는 메소드를 자동으로 호출할 수 있음
하나의 인터페이스를 이용하여 다양한 구현을 제공함



자바 스태틱(Static)과 파이널(Final)

자바 스태틱(Static)과 파이널(Final)


1) 스태틱의 개념
스태틱 : 공유값을 처리하는 클래스
파이널 : 변수를 상수화 하거나 메소드를 오버라이딩을 하지 않거나 클래스를 상속하지 않을 때 사용되는 키워드

2) 스태틱 변수와 메소드
스택틱 변수와 메소드의 특징
자바에서 static 키워드는 한 클래스의 모든 객체가 변수를 공유할 때 사용됨
static으로 선언된 변수는 그 클래스의 객체가 존재하지 않더라도 사용할 수 있음
static 키워드가 메소드에 적용되면 변수에 적용된 것과 마찬가지로 클래스의 객체가 존재하지 않더라도 사용할 수 있음
스태틱 메소드 내에서 사용될 수 있는 외부 변수는 스태틱으로 선언한 변수이어야 함
스태틱 메소드 내에서 this나 super를 사용할 수 없음
static은 c++처럼 지역 변수에 대해 선언할 수 없음

3) 파이널(Final)
변수를 final로 정의하면 더 이상 값을 바꿀 수 없음
즉, final 변수는 상수(constant)와 같은 의미를 같게 됨
final 변수는 딱 한 번만 초기화할 수 있으며, 일단 초기화가 이루어지면 더 이상 초기화할 수 없음

2018년 8월 18일 토요일

자바 상속(Inheritance)

자바 상속(Inheritance)

1) 상속의 개념과 특징
상속(Inheritance)이란 하나의 객체를 설계할 수 있는 구체(Concrete Class) 또는 단일 클래스를 또 다른 클래스가 기능 추가 및 변경, 특성을 추가하여 새로운 클래스로 정의하는 것을 말함

상속의 특징
  선조가 후손에게 재산을 상속하듯이 클래스가 또 다른 클래스에 상속할 수 있음
  클래스 간의 상속은 지정된 접근 제한자를 통해 상속하고 싶은 멤버 변수와 메소드를 또 다른 클래스에 그대로 전해 주는 것
  자바에서 후손 클래스는 선조 클래스로부터 멤버 변수와 메소드를 상속받지만, 생성자는 상속받을 수 없음
  자바에서 상속의 목적은 코드의 재사용성, 간결성, 확장성을 제공하는 것



2) 상속의 선언방법
 선조 클래스와 후손 클래스는 extends라는 키워드를 통해 상속이 이루어 짐
 자바의 상속은 선조 클래스를 하나만 둘 수 있는 단일 상속을 원칙으로 하며 선조 클래스가 하나 이상인 다중 상속은 지원되지 않음
  형식

3) Super와 this
 super 키워드 : 선조 클래스(superclass)를 의미함
 this 키워드 : 현재 오브젝트를 지칭하는 후손(subclass)을 의미함



4) 서브클래싱
선조 클래스의 속성과 구조를 그대로 가지면서 새로운 데이터 멤버 변수와 멤버 메소드를 추가해서 코드의 재사용을 하는 것

5) Is a와 Has a
is a의 관계가 성립하는 관계에서 선조 클래스를 참조하는 참조변수에 후손 클래스를 참조하도록 할 수 있음
is a 관계는 오브젝트 배열에서도 사용할 수 있음
클래스는 자신의 데이터 멤버로 다른 클래스의 객체를 가질 수 있음 - 즉, 다른 클래스에 대한 참조변수를 포함하는 클래스를 작성할 수 있으며 “Has a”가 발생함


6) 오버라이딩
메소드 재정의라고도 하며 상속받은 후손 클래스에서 상속해 준 선조 클래스에 이미 정의되어 있는 메소드의 기능을 변경해서 새로 정의하는 것

오버라이드하고자 하는 메소드가 선조 클래스에 존재해야 함
선조에서 선언한 메소드가 후손에서 사용할 때 메소드 명이 반드시 같아야 함
메소드의 파라미터 개수와 데이터형이 같아야 함
메소드의 리턴 형이 같아야 함
선조 클래스의 메소드와 동일하거나 접근범위가 넓은 접근 제한자를 후손 클래스에서 선언해야 함
static, final, private 메소드는 오버라이딩을 할 수 없음


자바 클래스의 캡슐화(encapsulation)

자바 클래스의 캡슐화(encapsulation)

1) 캡슐화의 정의와 목적
  캡슐화 : OOP 언어의 가장 큰 특징으로 변수 앞이나 메소드 앞에 접근제한자(access modifier)를 붙여 이 변수 또는 메소드를 다른 오브젝트에 어느 정도 노출시킬 것인지 결정할 수 있는 것
  클래스 캡슐화의 목적 : 자바에서는 클래스의 멤버 변수 즉 데이터를 사용자에게 보이지 않도록 함으로써 형 변환 또는 직접 접근으로 인한 데이터 결과 오류를 유도 할 수 있기 때문에 캡슐화를 구현함

2) 캡슐화의 방법
  데이터를 관리 하는 멤버 변수는 선언 시 변수 앞에 private을 붙여서 다른 클래스에서 직접 접근하지 못하도록 함
  멤버 메서드는 public으로 선언해서 다른 클래스에서 불러 사용할 수 있도록 접근 제한자를 선언함

자바 오브젝트 배열(Object Array)

자바 오브젝트 배열(Object Array)


오브젝트 배열의 정의
  오브젝트 배열(Object Array) : 선언된 클래스를 객체 생성해서 사용할 때 동적 할당한 배열의 주소를 참조시켜 하나 이상의 객체 자료를 효율적으로 관리하는 것
  클래스 배열(Class array)이라고도 부름

  형식 - 클래스 이름[] 변수 =new 클래스 이름[요소의 크기] ;

자바 생성자 (Construction)

자바 생성자 (Construction)
1) 생성자의 정의와 특징
생성자 : 클래스 안에 멤버로 객체 생성 시에 자동 호출되어 멤버 변수를 초기화시켜주는 특수한 메소드

특징
  클래스 이름과 동일하되 리턴 타입(return type)이 정의될 수 없음
  생성자는 오버로딩(overloading) 할 수 있음
  생성자의 접근 제한자는 private, protected, public이 올 수 있으며 생략 가능함
  생성자는 new를 이용하여 클래스가 만들어질 때 즉, 객체가 생성될 때 자동으로 한 번만 호출되는 함수이며 명시 호출할 수 없음
  생성자는 상속되지 않음

2) 생성자의 선언과 호출
클래스의 객체가 생성되는 과정은 가장 먼저 메모리에 새로운 객체를 위한 공간이 할당되고, 필드를 명시적로 초기화한 다음 생성자(constructor)가 수행됨

3) 디폴트 생성자 (Default Constructor)
  자바에서 모든 클래스는 반드시 하나의 생성자를 가져야 함
  클래스 정의 시 생성자 정의를 명시하지 않을 경우에는 자바 컴파일러는 인수(Argument)가 없는 'public 클래스 이름(){}‘ 의 디폴트 생성자(default constructor)를 제공함

4) 생성자 오버로딩
  클래스 내에 같은 이름의 여러 개의 메소드를 인수나 데이터 타입을 다르게 해서 정의할 수 있는 메소드 오버로딩과 같은 방법으로 생성자도 오버 로딩을 함

5) this( )
  생성자 오버로딩을 사용 시 이미 존재하는 생성자를 클래스 내에서 내부적으로 호출할 필요가 있을 때 사용하는 키워드

자바 클래스의 멤버 메소드



멤버 메소드
멤버 메소드란 클래스 내에서 선언된 메소드를 말하며 객체가 해야 하는 기능들을 정의한 함수임
반복적으로 사용하는 명령어를 정의해 필요할 때마다 호출하여 재사용 되는 함수의 원형을 자바의 기본단위인 클래스 내에 선언하게 되면 멤버 메소드가 됨
연산의 수행, 결과, 변수에 값 할당, 데이터베이스에 레코드 추가, 변경, 삭제, 파일 생성 및 복사 등의 작업을 수행함

멤버 메서드 호출
다른 클래스에서 메서드 호출 시 객체를 생성하여 “참조형 변수. 멤버 메서드(인수값)” 형태로 호출해서 사용됨
같은 클래스에서 메서드 호출 시 “메서드 이름 (인수 값)” 형태로 호출해서 사용 됨
멤버 메서드는 같은 클래스의 멤버 변수를 객체 생성하지 않고 바로 호출해서 사용 됨
메서드는 자신이 자신을 호출 할 수 있는데 이런 메서드의 호출 원형을 재귀 (recursion) 메서드라고 부름

자바에서는 클래스의 메소드를 호출할 때 argument로 입력되는 값들을 기준으로 기본 자료형(primitive data type)과 참조형(reference data type)으로 나뉘게 됨
기본 자료형(primitive data type)은 인수로 값이 복사되어 전달되고 참조 형(reference data type)은 인수로 주소가 복사되어 전달됨
메소드 오버로딩(OverLoading)은 같은 클래스 내의 같은 이름의 메소드를 파라미터의 개수나 데이터형이 다른 여러 개의 메소드를 정의 함
메소드 오버로딩(OverLoading)의 규칙
같은 클래스에 메소드가 정의되어야 하고, 클래스가 다르면 다른 메소드로 간주함
자바의 식별자 규칙에 따라 만들어진 메소드의 이름이 같아야 함
파라미터 개수가 다르거나 데이터형이 메소드마다 달라야 함
리턴형은 같아도 되고 달라도 됨

메서드 오버로딩 : 데이터 타입과 개수에 상관없이 출력이라는 명령 수행을 진행
메서드 오버로딩(OverLoading)의 규칙
① 같은 클래스에 메서드가 정의 되어야 하고, 클래스가 다르면 다른 메서드로 간주함
② 자바의 식별자 규칙에 의하여 만들어진 메서드의 이름이 같아야 함
③ 파라미터 개수가 다르거나 데이터형이 메서드 마다 서로 달라야 함
④ 리턴형은 같아도 되고 달라도 됨

자바 클래스의 구성요소와 멤버 변수

클래스의 구성요소
클래스는 선언할 때 구성요소를 포함하게 되는데 그 요소를 멤버라고 하며 종류에는 객체에 선언된 변수 또는 상수와 같은 데이터를 객체의 멤버 변수, 인스턴스 변수, 필드라고 함
객체의 데이터를 처리하기 위한 코드를 객체의 멤버 메소드, 인스턴스 메소드와 객체 생성 시에 데이터의 초기화를 담당하는 생성자 등이 있음



클래스의 멤버 변수
접근 제한자는 선언 시 멤버 앞에 접근 제한자를 기재하는 데 접근 제한자는 클래스를 포함한 각 멤버들의 호출 및 접근에 대한 범위임

public, default, private는 클래스 하나로 객체를 생성할 때 접근 제한을 명시하며 protected는 클래스 간의 상속 시에 제한을 두는 키워드임



2018년 8월 16일 목요일

자바 객체지향 프로그램 주요개념

자바 객체지향 프로그램 주요개념

캡슐화(Encapsulation)
클래스에서 멤버들을 선언하고 구현할때 불필요한 정보를 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는것으로 작업
자료추상화 또는 데이터 은닉화(data hiding)라고도 함

자바의 접근 제어자
public(+) - 무조건 자료를 공개
protected(#) - 상속관계에 공개
default(~) - 같은 패키지에 공개
private(-) - 비공개


상속성(Inheritance)
상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능
미리 만들어진 소스를 가지고 공유하며 재사용함
특별한 부분에 대해서는 다시 재정의해서 사용하기도 함


다형성(polymorphism)
어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩이나 오버로딩을 의미

오버라이딩(overriding) - 같은 이름의 메소드가 여러 클래스에서 다른 기능을 구현하는것
오버로딩(overloading) - 한 클래스에서 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 구현하는것

자바 객체지향 프로그램의 절차

자바 객체지향 프로그램의 절차

모델링 - 객체지향 프로그램의 절차는 객체들의 대한 속성과 기능을 추출하여 UML로 표현
클래스 - 객체 모델링에서 추출한 정보를 소프트웨어로 구체화하는 작업
객체 생성 - 마지막으로 정의된 클래스를 메모리에 생성 로딩하여 메시지를 주고 받을 수 있도록 함.

자바 객체지향 프로그램 기본 구성

자바 객체지향 프로그램 기본 구성

클래스(Class)
객체를 정의한 것으로 실세계에서 존재하는 사물이나 개념의 속성과 기능을 모델링해서 추상화시키는 과정
객체지향프로그램은 기본적인 사용자 저으이 데이터형(user define data type)이라고 할 수 있음


클래스 구조
클래스 명, 멤버변수(속성 attribute), 생성자, 멤버 메소드(행위 behavior)



객체(Object)
클래스의 인스턴스이며 정의된 클래스를 사용해서 실제로 메모리에 생성되어 메모리에 로딩된 상태를 말함
자신 고유의 속성(attribute)을 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있음
메모리를 경제적으로 사용함




자바 객체지향 프로그램

자바 객체지향 프로그램

절차지향프로그램
함수들을 중심으로 프로그램을 설계한후 거기에 필요한 데이터를 정의하는 방식의 프로그램
C언어가 대표되는 절차 지향 프로그램 방식은 함수 위주의 구조화된 방식
처음 시작되는 main함수에서 출발하여 그안의 내용을 순차적으로 실행
main함수는 대부분 또 다른 함수를 순차적으로 호출하는 방식으로 되어 있음

원시 데이터를 빠르고 효율적으로 계산하는 함수가 모듈단위로 구성되어 있고
대량의 데이터를 순차적으로 처리하기위한 알고리즘 구현 시 적합함

프로그램의 재사용이 어렵고 대규모의 프로그램 개발 및 유지보수에 어려움

C, FORTRAN, PASCAL 등


객체지향 프로그램
객체(Object) - 데이터와 데이터에 관련된 처리 내용을 수행하는 메소드를 묶는것
OOP(Object Oriented Programming) - 객체(Object)를 중심으로 프로그램을 짜는 언어
객체 지향 프로그램 - 데이터 처리를 하는 메소드를 하나의 프로그램으로 설계해서 연동하는것

프로그램이 순차적으로 일어나지 않고 객체(Object)들로 이루어진 프로그램에서 이벤트가 일어나면
그 이벤트를 처리하는 방식으로 프로그램이 실행

C++, JAVA, ASP, VISUAL BASIC, C# 등 최근에 나오는 대부분의 프로그래밍 언어들은 객체 지향 언어임


장점
프로그램을 유연하고 변경이 용이하게 만듦
소프트웨어 개발과 유지 보수 간편화
직관적인 코드 분석이 가능함

단점
실제세계의 모습을 그대로 반영하지 못함

2018년 8월 14일 화요일

자바 다차원 배열

자바 다차원 배열
차원이 하나 이상인 배열. 이차원이면 '[][]' 로 선언
차원이 늘어날 때마다 참조변수에 각 괄호 '[]' 를 추가해서 선언
생성과 값 대입은 일차원 배열과 흡사함

ex1>

int[][] array = {{1,2,3},{4,5,6,}};

  
ex2>

int[][] array = new int[2][3];
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 3;

array[1][0] = 4;
array[1][1] = 5;
array[1][2] = 6;


  

자바 반복문(foreach)

자바 반복문(foreach)
참조형 변수는 하나 이상의 상수를 관리하기 때문에 전체 목록을 좀더 편리하게 출력하도록 foreach 문을 제공함

jdk5.0 부터 사용


ex>

for(int num : array){
   System.out.println(num);
}

  

자바 배열(Array)

자바 배열(Array)
동일한 자료형의 데이터를 하나의 이름으로 묶어 놓은 data object

배열의 자료는 하나의 변수를 통해 나열형인 상수를 인덱스를 가지고 참조하는 형식으로 관리됨.
배열은 모든 기본자료형을 사용할 수 있으며 클래스들을 관리한는 객체배열도 사용할 수 있음.



ex1>


int [] array = {10,20,30};

System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array.length);


  


ex2>


int [] array = new int[3];
array[0]=10;
array[1]=20;
array[2]=30;
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array.length);


  

자바 continue 문

자바 continue 문
for문, while문, do~while문의 조건부로 제어를 옮기는데 사용하는 구문
지정된 반복문의 다음번 루프의 내용을 실행하도록 시도하는 명령문



ex>


int i=0;
while(i<10){
   System.out.println(i);
   i++;

   if(i==5){
      continue;
   }
}



  
}

자바 break 문

break 문
for문, while문, do~while문 등 반복 Loop 나 switch~case 문을 빠져나오는데 사용하는 구문
한번에 가장 가까운 하나의 Loop 를 벗어날때 사용하는


ex>


int i=0;
while(true){
   System.out.println(i);
   i++;

   if(i==5){
      break;
   }
}



  

자바 반복문(for)

자바 반복문 for 문
가장 많이 사용하는 반복문
정해진 횟수만큼 실행문을 반복해야 하는 경우 사용
구문안에 변수의 초기화, 반복 실행조건문, 그리고 증가 연사자를 모두포함

ex>


for(int i=0;i<10;i++){
   System.out.println(i);
}


  

다중 for 문
ex>


for(int i=0;i<10;i++){
   System.out.println(i);

   for(int j=0;j<10;j++){
      System.out.println(j);
   }
}


  

2018년 8월 13일 월요일

자바 반복문 while, do~while

자바 반복문 while, do~while
주어진 조건식의 결과가 true 일때 주어진 명령을 반복하는 구분
조건이 true 로 만족되는 한 반복문 수행

ex1>


while(조건식){
   실행문;
}


  

ex2>


do{
   실행문;
}while(조건식)


  

자바 선택문

자바 선택문
선언된 정수형 변수와 수식을 계한한 결과가 정수일때,
jdk 7.0 부터 인식하는 문자열이 상수식의 결과와 같은 case로 이동되어 명령을 실행할 때 사용되는 선택문
case 에 나열되지 않는 상수는 default 로 이동되어 명령이 실행됨


장점
조건식이 결과가 true 구문을 만날 때까지 실행되는 if 문 보다
결과값에 따라 선택할 수 있는 구문을 실행하기 때문에 실행속도가 훨씬 빠름..


단점
이동되는 상수의 제한된 결과 값 등에 의하여 구문이 선택적으로만 사용


ex>


switch(n){
   case 0: 실행문1 ; break;
   case 1: 실행문2 ; break;
   case 2: 실행문3 ; break;
   default: default 실행문
}


  

자바 조건문

자바 조건문
비교 연산자와 함께 조건식의 결과에 따라 명령을 수행하는 구문.
조건식에 대한 수행될 문장을 감싸고 있는 {} 가 생략될경우 오직 하나의 문장만 수행됨.

단일 if 구문
조건식의 결과를 true 일때만 실행하는 구문

ex1> if(조건식) 실행문1;
ex2> if(조건식){ 실행문1; 실행문2;  ... }



if else 구문
조건식의 결과가 true, false 로 나뉘어 명령이 실행되는 구문

ex1>

if(조건식) true실행문; else false실행문 ;

  
ex2>

if(조건식){ true실행문1; true실행문2; ... } else { false실행문1; false실행문2; ... }

  


다중 if 구문
하나이상의 if else 구문을 이용하여 여러 가지의 조건에 따라 명령이 실행되는 구문

ex>

if(조건식1){
   조건식1이 TRUE 일때 실행문;
   ...
}else if(조건식2){
   조건식2가 TRUE 일때 실행문;
   ...
}else if(조건식3){
조건식3이 TRUE 일때 실행문; ... }else { false실행문 ; ... }

자바 연산자 대입 연산자

자바 연산자 대입 연산자


자바 연산자 시프트 연산자

자바 연산자 시프트 연산자


자바 연산자 비트 연산자

자바 연산자 비트 연산자


자바 연산자 논리 연산자

자바 연산자 논리 연산자


자바 연산자 관계 연산자

자바 연산자 관계 연산자



자바 연산자 증가, 증감 연산자

자바 연산자 증가, 증감 연산자



자바 연산자 산술 연산자

자바 연산자 산술 연산자


자바 연산자 우선순위

자바 연산자 우선순위



자바 연산자


단항 연산자
항을 하나만 사용하는 연산자, 데이터를 가진 변수에만 적용되는 연산자
부호연산자, 증감 연산자, 증가 연산자 등


이항 연산자
두개의 피연산자와 한개의 연산자를 가지는 형식
산술 연산자, 비트 연산자, 논리 연산자 등


삼항 연산자
한 개의 조건식과 부대의 연산자를 가지는 연산자, 세개의 피연산자로 구성
조건에 따라 서로 다른 내용을 수행하는 경우에 사용


자바 형변황

자바 형변환
의도적으로 데이터의 형태를 바꾸는 동작.
데이터에 손실이 가더라도 데이터의 크기를 바꾸게 될 경우 사용함.
큰 데이터형의 변수의 값을 작은 데이터형의 변수에 할당할 때 반드시 필요함.

ex>
double d = 3.14F ;  //promotion
int res = (int) d ; // casting


자바 자료형

자바 자료형

기본형(Primitive type)
자신에게 할당된 메모리 영역에 값(value)을 직접 저장.

논리타입 boolean (1byte) true 또는 false (default:false)
문자타입 char     (2byte)  Unicode(0~65536) (default:null)
정수타입 byte     (1byte)  -128 ~ 127 (default:0)
            short    (2byte)  -32,768 ~ 32,757 (default:0)
    int       (4byte)  -2의31승 ~ 2의31승-1 (default:0)
    long     (8byte)  -2의63승 ~ 2의63승-1 (default:0)
실수타입 float     (4byte)  -3.4E38 ~ 3.4E38 (default:0.0)
            double (8byte)   -1.7E308 ~ 1.17E308 (default:0.0)


논리형 
참과 거짓에 관한 데이터 형, 오직 true 또는 false 중 하나만 상수로 가질 수 있음.
다른 어떤형으로도 변환이 되지 않음.
1byte의 크기를 가짐.

문자형
char자료형은 character의 약자로 16비트 정수형처리로 한 문자를 관리함.
자바에서 문자를 처리하기 위한 코드로 16비트 유니코드 사용(UTF-8)
작은따옴표로 묶인 한문자를 상수로 가짐.
작은따옴표로 묶인 특수문자를 상수로 가짐.
작은따옴표로 묶인 16진수 네자리로 문자로 표시 가능.
2byte의 크기를 가짐.



정수형
byte, short, int, long
소수점이 없는 부호 있는 숫자를 가진 데이터형
정수계열의 디폴트 데이터형은 int형으로 사용


실수형
소수점을 가진 상수를 저장하는 자료형
크기와 정밀도에 따라 float, double로 나뉨
묵시적으로 double을 소수점 상수 기본형으로 간주



--------------------------------------------------------------------------------------------


참조형(Reference data Type) 
자신에게 할당된 메모리 영역에 실제 데이터에 대한 참조를 저장.(실제 데이터는 별도의 메모리 영역에 저장)
참조형식 값의 메모리 주소에 대한 참조를 저장함
힙에 메모리를 할당하는 방식
자바에서는 배열과 클래스를 참조형이라고 말함



string 형
하나의 문자가 아니라 문자열을 표현하기 위한 클래스
자바언어에서 기본적으로 사용되는 데이터형태는 아님
new 키워드 없이 인스턴스를 만들 수 있는 유일한 클래스
큰따옴표로 상수를 감싸서 선언함

자바 변수 상수

변수
변하는 수, 값을 저장할 수 있는 메모리상의 공간

숫자 값, 문자열 값 또는 클래스의 객체를 나타냄.
변수에 저장되는 값은 변경할 수 있지만 변수이름은 그대로 유지됨.
특정 데이터혁식과 레이블을 사용하여 선언됨.
자바의 데이터형식 중 어떤것인지 지정해야 함.
응용프로그램이 실행될 때 값을 저장하기 위해 할당해야하는 정확한 메모리 양을 지정함.


변수 정의 규칙
_, $로 시작할 수 없으며 공백을 포함할 수 없음.
숫자나 특수문자로 시작할수 없고 대소문자를 구분함.
자바의 키워드는 변수명으로 사용할 수 없음.
변수는 선언과 동시에 초기화할수 있음.





상수
변하지 않는 수, 자신의 표기법이 곧 자신의 값이 되는것.

선언과 동시에 상수로 반드시 초기값을 할당함.
상수에 저장되는 값은 프로그램이 컴파일 될때 대입되며 변경되지 않음.
공용 상수는 클래스 내부에서 static final 키워드를 사용하여 선언됨.
공용 상수를 사용하면 코드를 보다 읽기 쉽게 만들수 있음.

자바 키워드

자바 키워드
예약어라고도 함. 자바에서 미리 사용하기 위해 예약해둔 단어.

goto, const 는 키워드이지만 실제적으로 쓰이지는 않음.
키워드는 식별자 또는 명칭으로 사용될 수 없음.
모두 소문자임
true, false, null 은 컴파일러 내부에 미리 정의되어 있는 상수임.



기본데이터유형
boolean, byte, char, short, int, long, float, double, void

변수유형
tansient, volatile

상수
true, false, null

흐름제어
if, else, switch, case, default, for, while, do, break, continue, return

클래스
class, interface, extends, implements, static, abstract, final, new, instanceof, this, super

접근제어
public, protected, private

메소드유형
syncronized, native

패키지
package, import

예외처리
try, catch, finally, throw, throws

사용되지 않는 키워드
goto, const

자바 식별자

자바 식별자
프로그래밍 언어에서 변수, 상수, 배열, 클래스, 메소드, 레이블 등을 식별하기 위하여 붙이는 이름
어떤 대상을 유일하게 실별 및 구별할 수 있는 이름
*유니코드(Unicode) 형식
코드에 존재하는 변수, 자료형, *서브루틴 등을 가리키는 토큰

*유니코드(Unicode)
전세계의 모든 문자를 컴퓨터에서 일관되게 표한하고 다룰 수 있도록 설계된 산업 표준
유니코드 협회(Unicode Consortium)가 제정함.
유니코드가 다양한 문자 집합들을 통합하는데 성공하면서 유니코드는 컴퓨터 소프트웨어의 국제화와 지역화에 널리 사용하게 됨.
비교적 최근의 기술인 xml, 자바 그리고 최신 운영 체계 등에서도 지원함.


*서브루틴
프로그램 가운데 하나 이상의 장소에서 필요할 때마다 되풀이해서 사용할 수 있는 부분적 프로그램



규칙
첫글자는 반드시 문자, _, $ 를 사용하며 그뒤에 숫자가 올 수 있음.
문자, _, $, 숫자 외의 특수문자는 사용할 수 없음.
공백문자는 포함될 수 없음.
대소문자를 구별해야함.
키워드로는 사용할 수 없으나, 일부 사용되는 것은 가능함.

자바코드 분석

자바코드 분석

주석문
  "/*" 와 "*/" 사이, "//" 뒤에 기술.
  컴파일 대상에서 제외.
  프로그램의 이해를 증진함.(해당 코드를 설명함)

class 키워드
  객체지향 프로그래밍에서 가장 기본이 되는 클래스를 정의하는 키워드.
  자바 프로그램은 이 클래스를 하나 이상 가짐.
  선언된 클래스 이름은 자바 파일의 이름이 됨.
  컴파일하게 되면 클래스 이름 뒤에 ".class" 라는 확장자가 붙음.

main 메소드
  프로그램 실행시 제일 먼저 실행되는 메소드.
  자바에서는 함수라는 이름 대신에 메소드 라는 말을 사용함.
  main 메소드의 입력은 String args 라는 매개변수.
  void : 아무것도 리턴하지 않음.
  public : 누구든 이 메소드를 호출할 수 있도록 공개.
  static : 이 클래스 에서는 오직하나의 main 메소드 공유.

괄호
  () 소괄호 : 메소드, 수식의 우선순위
  {} 중괄호 : Block의 시작과 끝
  [] 대괄호 : 배열 선언 밑 요소 지정


JVM(Java Virtual Machine)

JVM(Java Virtual Machine)
  실제로 존재하는 것이 아닌 개념적인 컴퓨터, 소프트웨어로 하드웨어를 에뮬레이션하는 가상 컴퓨터

JVM 메모리 영역

메소드(method) 영역
  클래스의 메소드에 대한 바이트 코드
  전역변수(클래스 변수)

힙(heap) 영역
  객체를 저장할 때 사용하는 메모리
  new 연산자를 이용하여 동적 할당해서 생성하는 영역

스택(stack) 영역
  지역변수, 메소드의 인자, 메소드의 리턴값, 리턴 번지 등을 사용

레지스터(registers) 영역
  가상 머신의 현재 상태를 보여주며 현재 실행되고 있는 메소드의 실행 포인터 저장

실행 풀(Runtime Constant Pool)
  숫자 리터럴과 상수 필드 포함, 메소드 영역으로부터 할당 받음

자바 설치와 실행

자바 설치와 실행
1. JDK(Java Development Kit) 설치
http://www.oracle.com 에서 다운로드 받아 설치할 수 있음.
Java SE의 JDK 를 설치하면 JRE 도 함께 설치 가능

*JRE
자바 실행환경인 JVM 과 클래스 라이브러리(JAVA API)들이 포함.
JDK 는 자바 개발 도구인 JRE와 개발에 필요한 실행파일 포함.


2. 자바 통합 개발 툴
JDK(Java Development Kit) 는 GUI(Graphics user Interface) 형태의 개발환경을 제공하지 있지 않음.
메모장 같은 에디터 프로그램에서 자바 코드를 작성.

이클립스를 많이 사용함.
http://www.eclipse.org





코드실행단계
1.자바 코드를 메모장 같은 에디터 프로그램을 이용해서 코드 작성.
2.파일 이름을 "클래스명.java" 로 저장함.(만일 클래스명이 class Test{} 라면 Test.java로 저장)
저장시 대소문자 반드시 구별해서 저장(클래스 명 첫글자는 반드시 대문자)
확장자는 반드시 ".java"

3.Compile(컴파일)
cmd > javac Test.java

4.실행
cmd > java Test

JAVA 언어의 탄생

JAVA 언어의 탄생
1991년
썬 마이크로 시스템즈(Sun Microsystems)에서 제임스 고슬링(James Gosling)에 의해 개발.
단순하고 버그가 없는 가전 전자 제품을 만드는 것을 목적으로 개발되기 시작함.
Oak(오크) 라는 언어 개발.
Oak(오크) 에서 자바로 이름이 바뀜.

1993년
제임스 고슬링(James Gosling)은 *자바 애플릿(Java Applet)을 구현한 최초의 웹 브라우저인 핫 자바를 개발함.
Netscape Navigater 2.0 에서 Java를 공식 지원.

*자바 애플릿(Java Applet)
HTML에서 사용자와 서버 사이의 dynamic 환경을 제공하는 작은 프로그램.
애니메이션이나, 간단한 게임 수행.
사용자가 서버에 별도의 요청을 하지 않고서도 단순 작업 수행.
빠르게 확신, 대중화를 이룸.


1995년
썬 마이크로 시스템즈(Sun Microsystems)에서 JDK(Java Development Kit) 알파 버전을 발표.

1997년
자바의 소프트 개발환경인 JDK(Java Development Kit)의 공식 발표.
JDK 1.1 시작

1998년
SDK 1.2(SoftWare Development Kit)인 JAVA 2를 발표.


2013년
JDK 7 버전까지 발전.




자바의 플랫폼은 소프트웨어로 구성.
자바의 영역
JAVA EE(Java Enterprise Edition)
자바의 서버측 기술로써 비즈니스 로직을 수행하는 컴포넌트 (EJB) 개발

JAVA ME(Java Micro Edition)
PDA, 핸드폰, 스마트폰 등 모바일 환경 구축

JAVA SE(Java Standard Edition)
자바 개발의 기본적인 에디션
채팅, 메신저, 게임, 메모장 등 데스크톱 애플리케이션을 개발



JAVA의 특징
1.코드의 단순성
C++에서 잘 사용되지 않거나 모호하고 좋지 않은 기능을 제외하고 단순화

*JAVA / C++ 다른점
구조체(struct), 공용체(union), 포인터(pointer) 를 지원하지 않음.
typedef, #define 을 지원하지 않음.
연산자 다운 정의를 지원하지 않음.
클래스 다중 상속을 지원하지 않음.
문자 배열로서 String 클래스 지원.
쓰레기 수집 (Garbage Collection) 기능을 제공함으로써 메모리 할당과 해제가 되어 함수를 사용할 필요가 없음.



2.객체 지향 언어
C++에서와 같은 전역 변수와 독립 함수가 존재하지 않음.
자바에서는 오직 객체만이 존재함.
객체 = 속성(Attributes) + 행위(Behavior)
     변수(Variables) + 메소드(Method)



3.플랫폼 독립
네트워크 환경과 다양한 하드웨어에서 작동할 수 있음.
자바 가상(virtual) 머신이 있으면 자바 코드의 변경 없이 실행할 수 있음.
자바 컴파일러는 바이트 코드(Byte Code)라는 중립적인 구조의 실행 코드를 만들어냄.
바이트 코드(Byte Code)는 각 플랫폼에 있는 인터프리터를 통해 실제로 실행됨.


4.멀티쓰레드(Multi-thread)
하나의 프로그램 안에서 여러 작업을 동시에 처리함.