주석
- 한 줄 //
- 여러 줄 /**/
자료형
- 기본형
- 정수형 : byte, short, int, long
- 실수형 : float, double
- 문자형 : char(2byte 길이, UNICODE)
- 논리형 : boolean(자바에서는 오직 boolean 형만이 참, 거짓을 표현) 리터럴은 true, false - 참조형
- 기본형을 제외한 모든 자료형
- 클래스 형의 변수, 배열 형의 변수, 문자열 형의 변수 등
리터럴(Literal)
- 변수나 필드에 지정할 수 있는 각 데이터 타입의 실제 값
- 0,1,2,3 등은 정수 리터럴, "Hello, Java Application"는 문자열 리터럴
식별자(Identifier)
- 클래스나 변수, 메소드의 이름
- 프로그래머가 임의로 정할 수 있다
- 규칙
- 대소문자를 구분
- 길이에 제한이 없다. 가독성을 위해 너무 긴 식별자를 쓰지 않는다
- 영어 대소문자, 한글, 숫자, 언더스코어(_) 문자, 달러($), 문자 등
- 숫자로 시작할 수 없다
- 변수나 필드 식별자의 경우 데이터 타입을 표시하기 위해 접두어를 붙이기도 한다 예) 정수형 변수를 'int nMyVar'
- 'public, class, main, while'등과 같이 자바에서 미리 정한 예약어(키워드)는 식별자로 사용 않됨
배열
- 자바에서는 기본형이 아닌 참조형으로 분류 따라서 배열로 선언된 변수에 저장되는 실제 데이터들은 힙영역에 존재
- 선언
- 1차원 배열 : int anArray1[];, int[] anArray2;
- 2차원 배열 : int anArray4[][];, int [][] anArray5; - 초기화
- 1차원 배열 : int anArray1[] = {1,2,3,4,5};, int[] anArray2 = {1,2,3,4,5};
- 2차원 배열 : int anArray3[][] = {{1,2,3},{4,5,6}};, int[][] anArray4 = {{1,2,3},{4,5,6}}; - 생성
- 1차원 배열 : int anArray1[] = new int[5];, int[] anArray2 = new int[5];
- 2차원 배열 : int anArray4[][] = new int[3][2];, int [][] anArray5 = new int[3][2]; - 크기
- 배열이름.length를 이용해서 얻을 수 있다
- anArray.length는 1차원 원소의 개수
- anArray[0].length와 anArray[1].length는 2차원 원소의 개수
클래스의 접근 제어자(Access Modifier) - 접근 제어자는 대상에 대한 접근 및 사용 범위를 정의하는 것, 외부에서 해당 대상을 접근 할 수 있는지 여부 결정
- public : 어디서나 상속 및 참조가 가능하다. 단, 하나의 소스 코드에는 하나의 public 클래스 많이 존재할 수 있다. 또한 소스 코드의 파일 이름은 그 안에 들어 있는 public 클래스의 이름과 일치해야 한다
- abstract : 클래스에 정의된 메소드들 중에는 구현을 생략하고 이름만 정의된 것들이 존재할 수 있는데(이러한 메소드를 정의할 때에는 앞에 abstract라는 접근 제어자를 붙여야 한다. 이런 abstract 메소드를 하나라도 가지고 있는 클래스를 정의할 때에는 반드시 abstract를 붙여야 한다. abstract 클래스는 아직 구현이 되지 않은 메소드를 포함하고 있기 때문에 객체를 생성시킬 수 없으며 상속만 가능
- private : 선언된 클래스 내부에서만 참조 가능, 항상 사용 가능한 접근 제어자는 아니고 다른 클래스 내부에 중첩된 클래스를 선언할 경우에만 붙일 수 있다
- final : 더 이상 상속이 불가능하도록 만든다. 따라서 abstract와 같이 사용될 수 없다
- 생략 : 같은 패키지 내부에서만 상속 및 참조가 가능하다
- protected : 같은 패키지 내부에서는 상속 및 참조가 가능하고 패키지 외부에서는 상속만 가능하다. 중첩된 클래스에서만 붙일 수 있다
메소드의 접근 제어자
- public : 클래스를 참조할 수 있는 곳이라면 어디서든지 호출 가능하며 상속
- private : 선언된 클래스 안에서만 호출이 가능하며 상속되지 않는다
- protected : 같은 패키지 내부, 선언된 클래스 안에서 호출이 가능하며 상속
- abstract : 메소드의 구현이 없고 명칭부만 있는 것, 메소드의 명치부란 메소드의 이름, 반환 자료형, 매개변수 리스트
- final : 한번 구현되면 상속은 가능하지만 서브클래스에서 overriding은 불가능한 메소드가 된다. abstract와 함께 사용될 수 없다
- synchronized : 스레드 클래스에서 동기화해야 할 메소드를 표시. 한 프로그램에서 동시에 실행될 수 있는 메소드가 서로 동기화 되어 있으면 하나의 메소드가 실행되고 있는 동안에는 다른 메소드는 실행될 수 없다.
java.lang 패키지에 포함되는 주용 패키지
- String, StringBuffer 클래스 : 문자열 처리 관련 클래스
- Process, Runtime, Thread, ThreadGroup 클래스 : 프로세스 및 스레드 제어와 관련된 클래스
- Math, StrictMath 클래스 : 수학 관련 메소드나 상수를 제공하는 클래스
- Exception, Throwable, Error 클래스 : 예외처리와 관련되 클래스
- Package, Class, ClassLoader : 패키지나 클래스에 대한 정보를 제공하는 클래스
- Wrapper 클래스 : 기본형을 다루기 위한 클래스 Boolean, Character, Byte, Short, Integer, Long, Float, Double등이 있다
Object 클래스
- java.lang 패키지의 최상위 클래스이면서 모든 클래스들의 최상위 클래스
- 자바의 모든 클래스들은 Object 클래스로부터 상속되어 정의된 클래스
- 사용자가 정의하는 클래스들은 특별히 다른 수퍼 클래스를 지정하지 않으면 암묵적으로 Object 클래스를 상속하도록 정해진다
자바 플랫폼
프로그램이 동작하기 위한 환경
자바 프로그래밍 언어로 작성된 자바 프로그램이 동작하기 위한 환경
한번 만들어진 자바 프로그램은 운영체제와 상관없이 자바 플랫폼이 설치되어 있는 곳이면 어디서든 실행이 가능하다
자바 VM(Virtual Machine)
'가상 기계'라는 뜻으로 자바 프로그램을 실행시켜주는 '구동 엔진'
자바 프로그래의 실행에 필요한 모든 사항을 관리하고 지원해 준다
가비지 컬렉션(Garbage Collection) 이라고 불리는 메모리 정리 작업을 자동으로 실행
가비지 컬렉션 : 자바 프로그램들이 쓰다 남긴 메모리 영역을 수거해서 다른 자바 프로그램들이 사용할 수 있도록 정리하는 것
자바 API(Application Programming Interface)
자바 프로그램을 실행하는 데 필요한 각종 라이브러리(Library)를 의미 일반적으로 기본(핵심) API와 확장 API로 구분
기본 API : 자바 플랫폼에 기본으로 포함된 라이브러리
확장 API : 그 이외의 라이브러리들, 별도로 설치
상속
- 다른 클래스의 필드와 메소드를 그대로 전달 받는 것
- 상속해 주는 클래스를 수퍼 클래스, 상속받는 클래스를 서브 클래스
- 서브 클래스에서는 상속받은 필드나 메소드를 수퍼 클래스에 정의된 그대로 사용
- 자바에서는 단일 상속만을 허용, 다중 상속은 허용하지 않음. 즉 하나의 서브 클래스는 오직 하나의 수퍼 클래스만을 상속
- 클래스를 상속할 때 extends 키워드를 사용
overriding
- 서브 클래스가 수퍼 클래스로부터 상속받은 메소드를 다시 구현해서 사용 하는것
- 메소드의 접근 제어자, 반환 자료형, 이름, 매개변수 등이 일치하게 정의해야 한다
- 단 메소드의 접근 제어자는 가시성이 넓어져도 된다
키워드 final
- final 클래스의 자식 클래스를 만들 수 없다
- final 메소드는 자식 클래스에 상속될 때 재정의될 수 없다
- final 변수는 상수로 사용
- 예외를 끝낼 때 키워드 final를 사용
예외 처리(Exception Handling)
- 프로그램 실행 도중 발생한 예외를 처리하여 프로그램이 실행을 멈추지 않고 계속 진행할 수 있게 하거나 발생한 예외에 적절한 조치를 취할 수 있게 하는 것
- 자바에서는 try-catch 구문을 이용하여 예외를 처리하는 코드를 넣을 수 있다
- 예외가 발생될 수 있는 명령문은 try 블럭 안에 넣어야 한다
try {
//예외가 발생할 수 있는 명령문
} catch (예외) {
//예외 처리 명령문
}
스레드 동기화
- 동시에 실행되는 서로 다른 스레드들이 공유하는 객체들에 대해 일관성을 유지하는 것
- 즉, 여러 스레드들이 공유하는 하나의 객체에 대해 모든 스레드들이 같은 모습을 보게 되어야 한다
- 일반적으로 여러 개의 서로 다른 스레드들이 하나의 공통된 객체를 다루어야 할 경우에는 반드시 스레드 동기화가 이루어져야 한다
스트림(stream)
- 자바에서는 모든 입출력이 이것을 통해 이루어진다
- 순서가 있고 길이가 정해져 있지 않은 일련의 데이터를 의미하는 추상적인 개념
- 데이터 자체의 의미보다는 물이 흐르는 파이프처럼 데이터가 지나다니는 통로를 의미
객체 직렬화(Serialization)
- 객체를 스트림을 이용하여 다른 곳으로 전송하기 위하여 byte 데이터로 변환시키는 것을 의미
- 객체 직렬화를 통해 변환된 byte 데이터는 직렬화의 반대 과정(deserialization)을 통해 다시 객체로 복원될 수 있다
- 객체를 전송시킬 때는 ObjectOutputStream 클래스를 사용
- 전송받은 객체를 복원할 때는 ObjectInputStream을 사용
BufferedInputStream 클래스
- InputStream의 자식 클래스
- InputStream 객체를 매개변수로 가지는 생성자가 제공
- 입력 과정에 버퍼링 기능을 제공
Hashtable 클래스
- (key, value) 형태의 원소를 저장
- 원소의 삽입과 삭제를 위한 메소드를 제공
- 원소의 검색을 위한 메소드를 제공
MAP
- (key, value) 형태의 원소들로 구성되는 자료구조를 다루기 위한 인터페이스
- key 값은 중복될 수 없으며 하나의 key에는 하나의 value만 대응
Set
- 원소들이 중복 될 수 없다
- 원소간의 순서가 의미가 없다
List
- 원소들이 중복 될 수 있다
- 원소간의 순서가 의미가 있다
AWT GUI 컴포넌트 클래스
- 컨트롤(control) : 사용자와의 실제 의사소통에 사용되는 GUI 컴포넌트를 의미, 버튼이나 스크롤바 등이 여기에 해당, AWT에 컨트롤로 정의된 클래스에는 다음과 같은 것들이 존재
- Button, Canvas, Choice, Label, List, Menu, MenuItem, MenuBar, Scrollbar, TextArea, TextField - 컨테이너(container) : 사용자와의 의사소통에는 직접적으로 간여하지 않고 하나 이상의 컨트롤들을 포함하여 그 컨트롤들의 배치 등을 조절하는 역할을 하는 GUI 컴포넌트를 의미
- Frame, Window, Dialog, Panel, ScrollPane
ActionEvent
- 버튼을 클릭 할 때
- 메뉴 항목을 선택할 때
- 텍스트 필드에서 엔터키를 칠 때
- 리스트 항목을 더블 클릭할 때
이벤트 어댑터 클래스
- 이벤트 리스너 안에 여러 개의 메소드가 선언되어 있는 경우에는 한 가지 메소드만 구현하면 되는 경우라도 나머지 메소드들에 대한 구현을 생략할 수 없다. 이런 불편을 해소가히 위해 제공
자바 애플릿
- HTML 문서에 포함되어 클라이언트의 웹 브라우저에 내장된 VM에 의해 실행되는 자바 프로그램
- 웹 브라우저 내에서 정해진 영역을 자신의 영역으로 사용하는 일종의 윈도우 프로그램이라고 할 수 있다
- 혼자 독립적으로 실행될 수 없고 반드시 HTML 문서에 포함되어 웹브라우저나 JDK에 포함되어 있는 Applet Viewer를 통해서만 실행될 수 있다
- 브라우저를 통해 웹 문서를 읽으면 애플릿이 다운로드되어 실행
- 애플릿을 구현하는 클래스는 Applet 클래스를 상속해야 한다
- Applet 클래스는 AWT 컴포넌트 클래스들 중에서 Panel을 직접 상속하는 클래스
Applet 클래스가 제공하는 실행과 관련된 메소드
- init() : 애플릿이 로드될 때 맨 처음 실행
- start() : init()이 실행된 다음 바로 실행
- stop() : 애플릿이 종료될 대 실행
- destroy() : stop()이 실행된 다음 바로 실행
- 애플릿이 실행될 때 생성자 -> init() -> start()의 순서로 호출
- 애플릿이 종료될 때 stop() -> destroy()의 순서로 호출
자바 인터페이스
- 상속과 같은 기능을 사용하지 않으면서 서로 관련이 없는 전혀 다른 클래스들이 갖는 공통적인 기능(메소드)들을 따로 떼어내어 하나의 인터페이스로 정의할 수 있다
- 여러 클래스들이 구현해야하는 메소드들을 미리 정의해 놓을 수 있다
- 인터페이스를 상속하는 클래스를 정의 할 때에는 implements 키워드를 사용
MediaTracker
- 이미지 파일을 불러들일 때 생기는 동기화 문제를 해결하기 위해 사용
- 같은 미디어 객체의 상태를 추적하는 기능을 가지고 있다
- 객체에 이미지를 추가하기 위해서 addImage() 메소드를 사용
- 추적하는 모든 이미지가 로드될 때 까지 기다리기 위해서 waitForAll()을 사용
생성자
- 생성자의 이름은 정확히 클래스 이름과 같아야 한다
- 하나의 클래스에 여러 개의 생성자가 존재할 수 있다
- 접근 제어 수준은 일반적으로 public이다
- overloading을 이용하면 하나의 클래스에 여러 개의 생성자를 만들 수 있다
synchronized 키워드
- synchronized로 정의된 메소드에 대해서는 상호 배제의 원칙이 지켜진다
- 자유 경쟁 방법을 통한 스레드 동기화 기법에 사용된다
- 성능 저하의 원인이 될 수 있으므로 불필요한 곳에서는 사용하지 말아야 한다
vector클래스
- 자동으로 크기가 조절되므로 배열보다 편리하다
- 내부적으로 Object[] 형태의 배열을 가지고 있다
- 한 가지 유형의 객체만을 저장할 수 있다
- List 인터페이스를 구현한 클래스이므로 원소의 중복을 허용
FlowLayout 클래스
- 자식 컴포넌트들을 차례대로 일렬로 배치하는 역할을 한다
- 한 줄이 다 차면 자동으로 다음 줄로 이동
- 일반적으로 버튼을 배치할 때 많이 사용
컨테이너 | 기본 배치 관리자 |
---|---|