티스토리 뷰
자료 출처 : 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 |