1. 패러다임

- 객체 지향 프로그래밍(Object-Oriented Programming)

- 구조적 프로그래밍(Structured Programming)

- 절차적 프로그래밍(Imperative Programming)


2. JRE : Java Runtime Environment 

- 자바 프로그램을 실행하기 위한 라이브러리, 자바 가상 기계, 기타 컴포넌트들을 제공한다.

- 자바 프로그램을 단순히 실행만 하고 개발은 하지 않는 일반인들을 위한 환경이다.


3. JDK : Java Development Kit (자바 개발 도구)

- JRE에 추가로 자바 프로그램을 개발하는데 필요한 컴파일러, 디버거와 같은 명령어행 개발 도구를 추가한 것이다.


4. 오류

- 컴파일 오류 : 컴파일 시에 발견되는 오류


- 구문 오류(Syntax error) : 문법 규칙에 어긋날 경우 생기는 오류


- 의미 오류(Semantic error) : 계산식에서 호환되지 않는 서로 다른 타입의 데이터에 대해 계산을 시도할 경우 발생하는 오류


- 논리 오류 : 프로그램이 실행되어도 의도하지 않는 결과를 발생하는 오류. 디버깅(Debuugging)을 통해 논리 오류를 찾고 수정한다.


- 실행 오류 : 프로그램이 실행되는 도중에 발생하는 오류. 자바에서는 예외(Exception)를 사용하여 실행 오류를 처리한다.



5. Exception(예외)의 종류와 발생원인


 Exception 종류

발생 원인 

ClassNotFoundException

클래스를 발견하지 못함

CloneNotSupportedException

Cloneable 인터페이스 미구현

IllegalAccessException

클래스 접근을 못함

InstantiationException

추상 클래스나 인터페이스 인스턴화

InterruptedException

쓰레드가 중단 되었을때

NoSuchFieldException

지정된 필드가 없을때

NoSuchMethodException 

지정된 메소드가 없을때

(IOException) CharConversionException 

문자 변환에서 예외가 발생했을때

(IOException) EOFException

파일의 끝에 도달했을때

(IOException) FileNotFoundException

파일을 발견하지 않았을 때

(IOException) InterruptedIOException

입출력 처리가 중단되었을 때

(IOException) (ObjectStreamException) InvalidClassException

클래스 내부의 serialize 처리 문제 발생

(IOException) (ObjectStreamException) InvalidObjectException

 serialize 오브젝트에서 입력 검증 실패

(IOException) (ObjectStreamException) NotActiveException

스트림 환경이 Active하지 않는데 메소드를 호출한 경우

(IOException) (ObjectStreamException) NotSerializableException

오브젝트를 serialize할 수 없을 때

(IOException) (ObjectStreamException) OptionalDataException

오브젝트 읽을 때 예상밖의 데이터가 있을 경우

(IOException) (ObjectStreamException) StreamCorruptedException

읽은 데이터 스트림이 파손되어 있을때

(IOException) (ObjectStreamException) WriteAbortedException

기록중 예외 발생한 스트림 읽은 경우

(IOException) SyncFailedException

FileDescriptor.sync() 호출 실패 시

(IOException) UnsupportedEncodingException

지정된 문자 부호화 형식 지원안할 때

(IOException) UTFDataFormatException

부정한 UTF-8방식의 문자열 만날 시

(RuntimeException) ArithmeticException

제로제산 등의 산술 예외 발생 시

(RuntimeException) ArrayStoreException

배열에 부정한 형태의 오브젝트 저장

(RuntimeException) (IllegalArgumentException) IllegalThreadStateException

쓰레드가 요구를 처리하기에는 부적합한 상태일 때

(RuntimeException) (IllegalArgumentException) NumberFormatException

부적절한 문자열을 수치로 변환할 때

(RuntimeException) IllegalMonitorStateException

모니터 상태가 부정일때

(RuntimeException) IllegalStateException

메소드가 요구를 처리하기에는 부적합한 상태일 때

(RuntimeException) (IndexOutOfBoundException) ArrayIndexOutOfBoundsException

범위 밖의 배열 첨자 지정 시

(RuntimeException) (IndexOutOfBoundException) StringIndexOutOfBoundsException

범위 밖의 String 첨자 지정시

(RuntimeException) NegativeArraySizeException

배열 크기를 음수로 지정한 경우

(RuntimeException) NullPointerException

null 오브젝트에 접근한 경우

(RuntimeException) SecurityException

보안 위반

(RuntimeException) UnsupportedOperationException

지원하지 않는 메소드 호출

 Error 종류

생원인 

(LinkageError) ClassCircularityError

클래스 초기화중에 순환 참조를 검출시

(LinkageError) (ClassFormatError) UnsupportedClassVersionError

JVM이 지원되지 않는 버전의 클래스 파일을 읽고자 할때

(LinkageError) ExceptionInInitializerError

정적 이니셜라이저로 예외가 발생

(LinkageError) (IncompatibleClassChangeError) AbstracMethodError

추상 메소드를 호출했을때

(LinkageError) (IncompatibleClassChangeError) IllegalAccessError

접근 불가능한 메소드와 필드 사용 시

(LinkageError) (IncompatibleClassChangeError) InstantiationError

추상클래스나 인터페이스 인스턴스화

(LinkageError) (IncompatibleClassChangeError) NoSuchFieldError

지정한 필드가 존재하지 않을 때

(LinkageError) (IncompatibleClassChangeError) NoSuchMethodError

지정한 메소드가 존재하지 않을 때

(LinkageError) NoClassDefFoundError

클래스 정의가 발견되지 않았을 때

(LinkageError) UnsatisfiedLinkError

클래스에 포함된 링크 정보를 해결하지 못할 때

(LinkageError) VerifyError

클래스 파일안에 부적절한 부분이 있을때

ThreadDeath

쓰레드가 정지해야만 한다는 의미

(VirtualMachineError) InternalError

내부 에러

(VirtualMachineError) OutOfMemoryError

메모리부족으로 메모리를 확보 못함

(VirtualMachineError) StackOverflowError

스택 오버 발생

(VirtualMachineError) UnknownError

심각한 예외 발생


[출처] http://silverbullet.tistory.com/entry/Exception%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%EB%B0%9C%EC%83%9D%EC%9B%90%EC%9D%B8


가장 이상적인 상황은 CPU 등으로부터 계산된 정보와


게이머의 반응속도가 일치하는 것이다.


이를 위해선 모니터의 재생빈도그래픽카드의 렌더링(프레임)수치가 일정수준 이상이어야 한다.


프레임과 재생빈도는 넉넉할수록 자연스러운 화면 정보를 제공하기 때문이다.


보통의 모니터는 60Hz정도의 재생빈도로 출시된다.

이유는 인간의 눈이 60Hz이상의 재생빈도를 구분할 수 없다는 한계를 지니기 때문이다. 


모니터의 재생빈도가 75Hz 를 넘어설 경우 미세한 움직임도 빠른 재생빈도로 표현할 수 있게 된다.


즉, 한계니 뭐니 할지라도 120Hz정도의 재생빈도와 프레임율(그래픽카드)이 보장되면 화면은 더 매끄럽고 속도감있게

움직이고 그것을 사용자는 바로 느낄 수 있다.


FPS : Frame per second (초당 프레임)


1초당 화면의 변화


FPS가 높을수록 그래픽카드는 더 많은 전력을 소모하게 되어 발열과 소음이 발생하게 된다.

따라서 가장 이상적인 것은 필요한 만큼 FPS제한을 두는 것이다.


실제로 게임 만드는 중간에 FPS를 제한하는 이유도 이와 같다. 게임이라도 사용자 컴퓨터가 버틸 수 있는 게임이어야 되기 때문이다.


참고로 프레임 속도는 매 순간마다 다르다. 그 이유는 모든 프레임이 각각 그려질 때마다 걸리는 시간이 다르기 때문이다.



비동기(Asynchronous)는 동시에 발생하지 않는다는 뜻으로 컴퓨터에서는

요청과 동시에 결과가 일어나지 않는다는 의미이다. 즉, 요청한 후에 결과가 즉시 나오는 것이

아니라 나중에 결과가 나오는 것이다. 따라서 나중에 결과를 받을 것을 약속했기 때문에

요청한 프로그램은 결과를 받기 전까지 다른 작업을 할 수 있다. 주로 복잡한 요청을

처리할 때 사용하는 방식이다. 동기방식보다 효율적으로 자원을 활용할 수 있다.


동기(Synchronous)는 동시에 발생한다는 뜻으로 컴퓨터에서는 요청과 결과가

동시에 일어난다는 의미이다. 즉, 걸리는 시간에 관계없이 결과를 처리하게 되므로 

요청한 프로그램은 다른 일을 할 수 없게된다. 주로 간단한 요청을 처리 할 때 

사용하는 방식이다.



블로킹(Blocking)은 작업이 중단된다는 뜻이다. 블로킹 방식은  일반적으로 통신에서 요청을 

처리할 때 결과를 받기까지 모든 일을 중단하고 대시상태로 만든다.


논블로킹(Non-blocking)은 블로킹과는 반대로 작업을 중단하지 않고 계속하는 것을 의미한다.

대게 네트워크 통신에서 요청한 작업 외에 다른 작업을 할 수 있기때문에 복잡한 설계에도 

효율이나 반응속도가 블로킹방식보다 뛰어나다.




정리하자면,


동기방식은 간단한 요청을 할 때 사용되며, 다른 작업이 블로킹처리되는 방식이다.

비동기방식은 복잡한 요청을 할 때 사용되며, 작업 처리가 논블로킹이므로 효율적으로 자원을

관리하고, 작업 처리의 반응속도가 빠르다.

'Programming Language > etc' 카테고리의 다른 글

쉘 스크립트 (Shell Script)  (0) 2019.06.26
Double Buffering - 더블 버퍼링 기법  (0) 2017.03.22



대게 프로그램에서 각 문장들은 위에서 아래로 순차적으로 실행된다. 이 때 제어문(Control Statement)을 사용하여 각 문장들의 실행 순서를 변경할 수 있다. 아래는 프로그램에서 나타나는 3가지의 제어 구조이다.



< 순차 구조 >


◆ ─> 『문장 A』 ─> 『문장 B』 ─> 




< 선택 구조 >


   ┌  true ─> 『문장 A』 ─┐

 ─> 【조건식】  ┤         

   └ false ─> 『문장 B』 ─┘




반복 구조 >


        ┌ false ───> 

 ┬> 【조건식】 ─ true ─> 『문장 A』 ┐

  └─<




제어문은 크게 조건문과 반복문으로 나뉘어 진다. 조건식의 산출값은 true 나 false 가 나오게 해야 한다.



▶ 조건문 : 조건에 따라 여러 개의 실행문(실행 경로) 중 하나(특정 경로)를 선택해야 하는 경우


1. if 문


# 기본 형태


if ( 조건식 )

문장1; // 조건식이 true 면 실행



# 조건에 따라 두 개 이상의 문장이 실행되어야 할 경우


if ( 조건식 ) {

문장1; // 조건식이 true 면 실행

문장2;
문장3;
}


# 중첩 if 문


if ( 조건식1 )
if ( 조건식2 ) // 조건식1이 true 면 실행 

문장1; // 조건식2가 true 면 실행



if ( 조건식1 ) {
if ( 조건식2 ) { // 조건식1이 true 면 실행

문장1; // 조건식2가 true 면 실행

문장2;

if ( 조건식3 ) { 

문장3; // 조건식3이 true 면 실행

}

}

}


2. if-else 문


# 기본 형태


if ( 조건식 )

문장1; // 조건식이 true 면 실행

else

문장2; // 조건식이 false 면 실행



# 조건에 따라 두 개 이상의 문장이 실행되어야 할 경우 - 복합문(Compound Statement)


if ( 조건식 ) {

문장 1; // 조건식이 true 면 실행

문장 2; // 이러한 문장 그룹핑을 복합문 또는 블록(block)이라고 한다.

}

else {

문장 3; // 조건식이 false 면 실행

문장 4;
}


# 간단한 조건문일 경우 조건 연산자로도 표현이 가능하다.


System.out.println( x > 50 ? "x = 50" : "x != 50");


# 중첩 if-else 문


if ( 조건식1 ) {

문장 1; // 조건식1이 true 면 실행


if ( 조건식2 ) {

문장 2; // 조건식2가 true 면 실행

문장 3;

}

else {

문장 4; // 조건식2가 false 면 실행

문장 5;
}

}

else {

문장 3; // 조건식1이 false 면 실행

문장 7;
}


3. switch 문


# switch 문은 여러 개의 실행문 중 해당 조건에 맞는 실행문을 선택한다.


# 기본 형태


number = 5;


switch( number ) { // switch 안의 괄호(수식)는 문자나 문자열도 가능하다.

case 1 :

문장1;

break; // break; 문장은 빠져나가는 것으로 없을 경우 아래의 case 도 실행된다.

case 2 :

문장2;

continue; // continue; 문장은 다시 switch(수식) 문으로 돌아가는 것으로 break; 문장과는 다르다.

case 3 :

문장3;

break;

default : // switch 안에 수식의 결과가 어떤 case 문에도 해당되지 않는 경우에 실행된다. 

문장4; // 예상치 못한 결과에 대비하여 default문은 작성하는 것이 좋다. (작성 여부는 자유)

break;




▶ 반복문 : 어떤 조건이 유지되거나 정해진 횟수만큼 문장을 반복(Looping)해야 하는 경우


1. while 문


# 조건식이 참이면 블록을 반복적으로 실행한다.


while ( 조건식 ) {

반복문장;

}


# 무한 루프


while (true) {

문장1;

문장2;

문장3;

}



2. do-while 문


# 문장을 우선 실행한 뒤에 조건식을 검사한다.


# 기본 형태 - 끝에 세미콜론(;) 필수.


do {

반복문장1; // 처음에는 무조건 실행!

} while ( 조건식 );



3. for 문


# 정해진 횟수만큼 반복할 때 사용된다.


# 기본 형태

 - 초기식 → 조건식 ─ true → 문장1; → 문장2; → 증감식 → 조건식 ─ true → 문장1; → 문장2; → 증감식 

→ 조건식 ─ false → 반복문 종료


for ( 초기식(1) ; 조건식(2) ; 증감식(5) ) { // 괄호 안은 처음 루프돌 때 순서입니다.

문장1;  (3)

문장2;  (4)

}


# 예제


for ( int i = 0; i < 5; i++ ) {

System.out.println(" i 의 값은 : "+ i);

}


# 무한 루프


for ( ; ; ) {

문장1;

문장2;

}

+ Recent posts