티스토리 뷰

program

JAVA 간략 정리

littlecarbb 2014. 2. 14. 09:43

자료 출처 : http://www.jabook.com/jabook_original/book_second_novel_java/second_novel_java_html/index.html


1. 자바

- J2SE (Java 2 Standard Edition) 및 Documentation 설치

- 환경 변수 설정

a. JAVA Path 추가 : javac 위치

b. classpath 추가 : '.' 현재 폴더

- 클래스 이름과 파일 이름이 같아야 함.

a. 하나의 파일에 여러개의 클래스 존재 가능

b. 여러개의 클래스 중에 하나만이 public 이며, 보통 main을 public으로 사용

c. 클래스 외부에 변수나 메서드는 존재 할 수 없다.

- 바이트 코드

a. 완전한 기계어가 아닌 중간 단계의 코드, VM 코드

b. .java 파일을 컴파일하여 생성된 .class 파일

- 자바의 스택, 증가 방향으로 스택이 자람


2. 문법

- 자료형 : byte(1), char(2), int(4), long(8), float(4), double(8), boolean(1)

- Access Identifier

> public

> friend : 자바에는 존재하지 않음

> private : public 멤버를 통해 접근

> protected : 상속 관계(public), 비상속 관계(private)

- static 멤버 변수/메서드

> 객체를 아무리 많이 만들어도 static 변수는 오직 하나만 생성

> 동일 클래스의 객체가 하나의 변수를 공유, 객체의 참조 카운트 및 공유 데이터의 참조 등등의 용도 사용

> 클래스 참조 변수만 만들어도 생성, 클래스 이름으로 바로 접근 가능

> static 메서드는 static 변수만 접근 가능

- 상수 변수 선언 : final 키워드 사용, 단 한번만 초기화 가능

- Overloading : 하나의 이름으로 여러개의 메서드를 만드는 기법, 파라미터에 의한 구분

- 상속 : 키워드 extends 사용, 다중 상속 지원하지 않음 (interface에 의해 변칙적 다중 상속 지원)

- Overriding : 상속 클래스에서 메버 함수 재정의

- Virtual Method

a. 하위 클래스의 메모리를 상위 클래스로 캐스팅했을 때 그리고 메서드가 재정의 되었을 때!

b. 상위 클래스의 객체명으로 메서드를 호출하면, 재정의된 메서드가 호출

- final 메소드 : 오버라이딩이 불가능 메소드

- final 클래스 : 상속이 불가능한 클래스

- instanceof : 객체의 형을 확인

- transient

a. 멤버변수를 직렬화의 대상에서 제외할 때 사용하는 키워드

b. 멤버 변수 앞에 transient 명시

c. 스태틱 변수는 공유 메모리 개념으로 직렬화에서 제외

- 상수

a. public static final double PI = 3.14D;

b. enum SignFlag { black, yellow, green, blue, red }; // 순차적으로 0, 1, 2, 3, 4 할당

- 가변인수

a. C언어 : int function (int x, ...);

b. JAVA : int funtion (String ... strs); // String 파라미터 여러개를 받음

- Wrapper 클래스

a. 기본 타입을 객체화

b. Integer, Float, Long ...

- this

a. this : 자기 자신

b. this() : 자신의 생성자

- super : C++의 :: 역할, 상위 클래스의 this 역할

a. 상위 클래스의 생성자에 파라미터가 존재한다면, 하위 클래스에서 super(파라미터) 호출 의무

b. 하위 클래스는 상위 클래스 생성자의 파라미터를 충족시켜야 하위 클래스가 생성된다.

- Abstract

a. abstract method : 클래스 내에 메소드의 prototype만 존재 하는 경우 > 하위 클래스에서 재정의 사용

메소드 앞에 abstract 키워드 사용

b. abstract class : abstract method 멤버를 하나라도 가지고 있는 경우

- Interface : abstract method로 구성된 클래스

a. class 대신 interface 키워드 사용

b. abstract method의 키워드 abstract를 생략한다. - interface 키워드 자체에 선언이 되어 있다.

c. 상속 키워드인 extends 를 사용 안하고, implements 키워드를 사용한다.

d. static 상수 변수 포함 가능 (Static Constant Variable)

e. 다중 상속의 개념 사용 가능

- 배열

a. new 생성 필요

ex) int[] ar = new int[10];, int[][] ar = new int[2][3];

b. 배역 복사 : System.arraycopy() 혹은 배열 자체의 clone() 사용

c. 객체 배열

객체 배열 생성과 메모리 할당이 분리 (기본 데이터 배열과의 차이점)

-Generic : 클래스에 사용할 타입을 디자인 시에 지정하는 것이 아니라, 사용할 때 지정하는 방식 (C++ : Template)

- Collection 인터페이스 - Vector, Stack, LinkedList, TreeSet HashSet 클래스

- Map 인터페이스 - Attributes, HashMap, Hashtable, TreeMap 클래스 - key,value 페어 구조

- Enumeration 인터페이스

a. 해당 컬렉션 전체를 복사하여 처리

b. Collection 인터페이스 : hasMoreElements(), nextElement() 메소드 지원

c. Map 인터페이스 : Enumeration 캐스팅 방법 keys(), elements()

- Iterator 인터페이스

a. 순차적 접근 도중, 해당 컬렉션에 데이터 추가시 ConcurrentModificationException 발생

- for each 구문

a. 기존 : for (Iterator<String> i=ar.iterator(); i.hasNext(); ) { String tmp=i.next(); System.out.println(tmp); }

b. 추가 : for (String tmp : ar) { System.out.println(tmp); }

- Exception

a. Format

try { /* 에러 발생 소지가 있는 코드 */}

catch (에러이벤트1 e) { /* 이벤트1 발생 처리 코드 */ }

catch (에러이벤트2 e) { /* 이벤트2 발생 처리 코드 */ }

finally { /* 에러가 발생하든 하지 않든 처리하는 코드 */ }

b. throw

~ 사용자가 강제로 이벤트 발생

~ Format : throw new Exception()

c. throws : Exception 처리를 호출하는 쪽에서 처리하도록 미룬다.

d. 필수적 예외 처리 : 네트웍, DB, File, 메모리 입출력 관련 부분


3. Thread

- 동작

a. Runable 인터페이스

class Top implements Runnable {

public void run () { /* Thread 작업 */ }

}

public class ThreadMain {

Top t = new Top();

Thread thd = new Thread(t);

thd.start(); // Thread 시작

}

b. Thread 상속

class Top extends Thread {

public void run () { /* Thread 작업 */ }

}

public class ThreadMain {

Top t = new Top();

t.start(); // Thread 시작

}

c. Runable + 생성자

class Top extends OtherClass implements Runnable {

public Top () {

new Thread(this).start(); // Thread 시작

}

public run () { /* Thread 작업 */ }

}

public class ThreadMain {

Top t = new Top(); // Thread 시작

}

- 상태 / 제어

a. Thread 상태 : Start, Runnable, Run, NotRunable, Dead

b. Thread 우선권

범위 : MIN_PRIORITY=1, NORM_PRIORITY=5, MAX_PRIORITY=10

setPriority (priority_value)

getPriority ();

c. NotRunnable 상태

~ sleep () : 일정시간 NotRunnable --> Runnable

~ wait () : NotRunnable 상태 전환

~ notify () : Runnable 상태 전환

d. 동기화

~ 메소드 내의 특정 부분 동기화 처리 : synchronized ( object ) { /* 동기화가 필요한 작업 수행 */ }

~ 함수 자체를 동기화 처리 : public synchronized void function ( parameter ) { }


4. 문자열

- String

a. String 할당된 데이터의 변형이 불가, 문자열 추가시 객체를 만들어 새로 처리 부가하 많음

b. Formatting 기능 지원(JAVA 5.0)

String s1 = String.format("%s %d %f %o %h", "Hello", 100, 3.14F, 100, 100);

- StringBuffer (동기화 지원) ~ String 객체의 데이터 변형 가능, 동일 객체에 추가하는 방식 부하 적음

- StringBuilder ~ StringBuffer와 동일, 동기화 지원하지 않음


5. 스트림

- 문자 스티림 : Reader / Writer

- 바이트 스트림 : InputStream / OutputStream

a. File : 파일/디렉토리의 정보, C의 stat()/opendir()/mkdir()/unlink() 등등 모든 메소드 지원

b. BufferedInput / BufferedOutput

File Stream 을 Buttered 방식으려 변환 처리하는 것이 효율적 (데이터가 큰경우)

c. RandomAccessFile : Random access

- Memory

a. ByteArray, CharArray, String

배열의 크기를 동적으로 늘리수 있음

byte[] arr = { 'j', 'a', 'v', 'a' };

ByteArrayInputStream bais = new ByteArraryInputStream (arr);

- Data

a. 데이터 타입 단위로 데이터를 저장하고 읽어 낼 수 있음

b. 지원 타입 : boolean, byte, char, short, int, long, float, double

- Object

a. Serializable 인터페이스

b. 객체를 상호간에 주고 받을 수 있음

- Stream 변환

a. 입/출력 스트림 -> 입/출력 스트림

b. 바이트/문자 -> 바이트/문자

c. InputStream -> InputStreamReader, OutputStream -> OutputStreamWriter


6. Object

- toString() : 객체의 요약 정보를 문자열로 리턴하는 목적으로 사용

- equals() : == 연산자와 동일한 역할

a. 기본적으로 참조값 비교

b. 사용자가 재정의해서 사용자만의 비교법을 만들어서 사용할 목적으로 제공되는 메서드

- hashCode() : 객체가 보유하고 있는 고유의 번호 리턴

a. hashCode()는 10진수 리턴

b. toString() 시에 나오는 값은 16진수

- finalize() : 객체의 메모리가 수거되기 직전에 가비지 콜렉터에 의해서 자동 호출되는 메서드

a. 재정의 시에 super.finalize()를 호출해야 한다.

b. 가비지 컬렉터

~ 가비지 컬렉터도 스레드다.

~ 메모리가 모자라거나 메모리 정리가 필요할 때 동작

~ System.gc() 호출로 수동으로 동작 시킬 수 있음

- clone() : 객체 복사

a. protected 이기 때문에 상속된 상태에서 Object 소속의 clone()을 사용 할 수 있음

b. Cloneable 인터페이스가 구현된 상태에서 clone() 사용 가능

c. Vector 등등에서 미리 구현된 clone의 경우 모든 것을 복사하는 것이 아니라, 구성원들의 참조값만을 복사한다.

- wait() / notify() / notifyAll()

a. notify()로 스레드를 깨울때 시그널이 무시되는 경우가 있다.

b. 이런 위험성을 대신하여 모든 스레드를 깨우는 notifyAll()을 주로 사용한다.

c. 이경우 wait()에서 빠져 나왔을때 조건에 맞지 않으면 다시 wait() 되도록 코드를 구성한다.

- getClass() : 컴파일된 .class 파일에 있는 클래스의 정보 확인이 가능

a. 가상 머신이 Data.class를 로딩한 뒤에 할 수 있는 대부분의 작업을 프로그램머가 할 수 있다.

- 직렬화

a. 직렬화 선언

~ 인터페이스 선언 : Serializable, Externalizable

b. 직렬화 제외 경우

~ transient 키워드가 명시된 멤버변수

~ static 변수는 공유메모리 개념으로 제외

~ 직렬화가 불가능한 객체를 포함한 경우

하위 클래스는 직렬화 가능하지만, 상위클래스가 직렬화 선언이 안되어 있으면서 생성자에 매개변수가 있는 경우

~ 클래스 : 이벤트 어댑터, 이미지 필터, AWT 클래스, beans, socket, URLConnection

c. Externalizable

~ 사용자가 정의 직렬화

~ writeExternal(), readExternal() 메소드를 구현하여 제어

~ 매개변수 없는 생성자를 반드시 구현

7. Reflection

- 리플렉션

a. 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법

b. 형을 알고 있지만 형변환(다운캐스팅)을 할 수 없는 상태에서 객체의 메서드를 호출 할 수 있다.

- Class 클래스

a. 클래스 내에 포함된 정보 알아내기

Class c = Data.class;

Method[] M = c.getMethods(); // 메서드 정보

Field[] f = c.getFields(); // 멤버 정보

Constructor[] cs = c.getConstructors(); // 생성자 정보

Class [] iface = c.getInterface(); // 인터페이스 정보

Class sc = c.getSuperClass(); // 상위 클래스 정보

[출처] JAVA 간략 정리|작성자 땅콩과별

'program' 카테고리의 다른 글

안드로이드 os버젼과 api레벨  (0) 2014.07.07
아두이노 입문 괜찮은글  (0) 2014.06.22
[java] instanceof 연산자  (0) 2014.02.13
[Java] 누가 날 부른거요? 날 호출한 클래스 알아내기.  (0) 2014.02.13
Fink  (0) 2014.02.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함