○Exception Handling

 ▷프로그램에서 예상치못한 예외가 일어날 경우, 이를 처라히는 방법.

 

 ▶Exception (예외)

  ▷프로그램이 재대로 실행될 수 없는 상황

  ▷프로그램이 이상한 결과를 일으킬 수 있는 비정상적인 상황

 

  ◎Ex - Standard Exception, 기본적으로 내장

   ▷null 참조 (NullPointerException)

   ▷0으로 나눔 (ArithmeticException)

   ▷음수/범위를 벗어난 index (ArrayIndexOutOfBoundsExcepton)

   ▷Class 객체의 Casting 오류 (ClassCastException)

 

  ▶Checked vs Unchecked Exception

   ▷Checked: 도중에서의 에러 (입력 오류, 방해, ...)

    ▷Check Exception처리를 잘 해주는 것이 중요.

   ▷Unchecked: run-time 프로그래밍 과정에서의 에러, 컴파일 도중 에러가 발생한다.

 

 

 ▶try ~ catch

  ▷java에서 Exception을 처리하는 방법

  ▷try 내에서 exception이 throw되었을 경우, exception에 알맞은 catch구문으로 넘어간다.

   ▷throw new Exception();

 

  ▷rethrow: exception을 throw하고 catch하지 않는 경우, 해당 함수/메서드에 throw하는 exception을 명시해야 한다.

 

  ▶Multiple catch

   ▷여러 catch블럭을 하나의 try에 대해 정의할 수 있다.

   ▷다만, exception은 각기 다르거나, 부모 Exception이 뒤에 있어야 한다.

    ▷부모 Exception이 앞에 있을경우, 뒤의 자식 Exception들이 실행되지 못한다.

 

  ▶General Exception

   ▷모든 exception은 Exception Class를 상속받는다.

   ▷Exception은 모든 종류의 exception에 대해 반응 가능하다.

 

  ▶finally

   ▷언제나 실행되는 구문

   ▷try에서 exception이 throw되어도 실행된다.

   ▷try구문이 정상적이던 비정상적이던 resource를 안전하게 종료시키는데 사용된다.

 

  ▶try-with-resource (Java 7)

   ▷resource가 statement끝에 종료되는것을 보장한다.

   ▷java.lang.AutoCloseable을 implements한 Class에 대해서 지원한다.

 

 

○User-defined Exception

 ▷사용자가 exception을 직접 정의할 수 있다.

 ▷알맞은 exception을 상속받는다. (주로 RuntimeException)

 

○assert

 ▷단언문. boolean식을 포함하고 있다.

 ▷조건을 확인하고, 해당 조건을 만족하지 못하면 프로그램을 종료시킨다.

 ▷즉, 조건이 참임을 확신가능하다.

 ▷Precondition, Postcondition을 확인하는데 주로 사용된다.

 

 ▶사용

  ▶assert boolean식;

   ▷boolean식이 false이면 프로그램을 종료시킨다.

 

  ▶assert boolean식 : 수식;

   ▷boolean식이 false이면 수식을 실행하고, 프로그램을 종료시킨다.

 

 

 ▶enable / disable

  ▷-ea 옵션을 통해 assertion을 실행하거나, 무시할 수 있다.

'컴퓨터 언어 > java' 카테고리의 다른 글

Thread  (0) 2020.11.24
Process  (0) 2020.11.23
Lambda Expression  (0) 2020.11.16
Collection  (0) 2020.11.16
Interface  (0) 2020.11.16

○Lambda Expression

 ▷식별자 없이 실행 가능한 함수

 ▷코드에 직접 함수를 적어 이를 호출하는 방식

 ▷주로 event listeners / callbacks에 사용

 

 ▶Functional Interface

  ▷단 하나의 abstract 메소드만을 가진 Interface로 정의됨.

  ▷주로 event listener들이 이런 형식으로 만들어짐.

 

  ▶Lambda Expression 이전의 표현 방법

   ▷Interface 객체에 함수를 따로 정의할 필요가 있었음.

 

  ▶Lambda Expression을 통한 Functional Interface

   ▷Functional Interface를 간단하게 표현 가능함.

 

 ▶Lambda Expression 표기

  ▷(매개변수, ...) -> { 실행문 ... }

 

 ▶generic 사용

  ▷Lambda Expression을 통해 Generic Parameter를 자동으로 지정 가능하다.

 

  

  ▶Parameter: 실행문에서 사용할 매개 변수들. 

   ▷Single Method Interface에서 사용하는 경우, 해당 Method에 맞는 매개변수를 넣어야함.

   ▷Type의 추론이 가능한 경우, 생략 가능함.

   ▷매개변수가 0개인경우 ()를, 여러 개인 경우 ,를 통해 구분한다.

 

  ▶Function Body: 실행할 함수들

   ▷->를 통해 Function Body를 특정한다.

   ▷여러 줄일 경우에는 {}를 통해 묶는다.

 

  ▶Return: 반환할 값

   ▷Function Body에 return문을 추가하면, 반환할 값을 지정할 수 있다.

   ▷return값을 계산하기 위한 한 줄의 간단한 식일 경우, return을 생략 가능하다.

 

 ▶외부 변수의 사용 (Variable Capture)

  ▷외부의 변수에 Access하여 값을 읽어올 수 있다.

  ▷읽은 시점을 기준으로 고정된다. (Capture)

  ▷effetively final인 변수만을 가져올 수 있다.

   ▷effectively final: 유사 final, 해당 변수가 선언 후에 바뀌지 않으면 effectively final이며, final 취급을 받는다.

 

  ▷Local Varable: 지역 변수를 가져올 수 있다.

 

  ▷Instance Variable: lambda를 만든 객체를 가져올 수 있다.

 

  ▷Static Variable: Static 변수를 가져올 수 있다.

 

 

 ▶Method Reference

  ▷하나의 메소드를 호출하는 간단한 lambda expression은 Method를 reference해서 더 간단히 표현 가능하다.

'컴퓨터 언어 > java' 카테고리의 다른 글

Process  (0) 2020.11.23
Exception  (0) 2020.11.19
Collection  (0) 2020.11.16
Interface  (0) 2020.11.16
Inheritance  (0) 2020.11.14

●Collection

 ▷데이터의 집합, 그룹

 ▷Type parameter (<T>) 를 통해 지정된 Object들을 저장한다.

 ▷import java.util.*

 

 

○Set

 ▷순서를 유지하지 않는 데이터의 집합

 ▷데이터의 중복을 허용하지 않는다.

 

 ▶HashSet

  ▷가장 빠른 임의 접근 속도

  ▷순서를 예측할 수 없다.

 

 ▶TreeSet

  ▷정렬 방법을 지정 가능하다.

 

 ▶메소드

 

 

○List

 ▷순서가 있는 데이터의 집합

 ▷데이터의 중복을 허용한다.

 

 ▶LinkedList

  ▷양방향 포인터 구조로 이루어져있음. (Doubly)

  ▷삽입, 삭제가 비교적 자유로움

  ▷Stack, Queue, DQueue등에 사용

 

 ▶Vector

  ▷대용량 처리를 위해 사용했으며, 내부에서 자동 동기화가 일어남

  ▷비교적 성능이 좋지 않고, 무거움

 

 ▶ArrayList

  ▷단방향 포인터 구조로 이루어져 있음.

  ▷각 데이터에 대한 인덱스를 가짐

 

 ▶메소드

  ▷boolean add(T): T를 List에 추가한다.

  ▷String toString(): List를 문자열로 바꿔 반환한다.

  ▷int size(): List의 크기를 반환한다.

  ▷T get(index): 해당 index의 element를 반환한다.

  ▷boolean remove(T) / remove(index): 해당 index의 element/ element를 지운다.

  ▷boolean removeAll(List): 인자의 List에 있는 모든 element를 지운다.

  ▷int indexOf(T): T와 같은 element의 index를 반환한다. (처음부터 찾음)

  ▷int lastIndexOf(T): T와 같은 element의 index를 반환한다. (끝부터 찾음)

  ▷boolean contains(T): T를 가지는지 확인한다.

  ▷boolean containsAll(List): List내의 모든 element들을 가지는지 확인한다.

  ▷List subList(startIndex, endIndex): startIndex부터 endIndex까지로 새로운 List를 만든다.

  ▷void clear(): List를 비운다.

  ▷Iterator<T> iterator(): List를 순회하는 Iterator<T>를 반환한다.

   ▷boolean hasNext(): 다음 element가 있는지 확인한다.

   ▷boolean next(): 다음 element를 가리킨다.

  ▷boolean isEmpty(): List가 비었는지 확인한다.

 

 

○Map

 ▷Key와 Value의 쌍으로 이루어진 데이터의 집합

 ▷순서가 유지되지 않음.

 ▷Key의 중복은 허용하지 않지만, Value의 중복은 허용

'컴퓨터 언어 > java' 카테고리의 다른 글

Exception  (0) 2020.11.19
Lambda Expression  (0) 2020.11.16
Interface  (0) 2020.11.16
Inheritance  (0) 2020.11.14
Package  (0) 2020.11.13

○Interface

 ▷class가 해야할 일을 명시하는 일종의 signature class

 ▷정의되지 않은 메소드들을 가진다.

 ▷abstract class와 비슷하다.

 ▷여러 Class에 대해 일반화된 함수를 지원해줌. ( ex) 다른 Class간의 비교 )

 

 ▶선언

  ▷Class와 비슷한 방식으로 선언한다. (class 대신 interface)

  ▷메소드를 선언만 하고, 정의하지 않는다.

 

 ▶포함 (implements)

  ▷Class는 interface를 implements할 수 있다.

  ▷implements한 interface의 모든 method를 정의해야 한다. (abstract class와 비슷)

  ▷한번에 여러 개의 interface를 implements할 수 있다. (,를 통해 구분)

 

 ▶Interface variable

  ▷Abstract Class와 다르게, Interface 타입의 변수를 선언할 수 있다.

  ▷해당 Interface를 포함한 모든 Class가 변수에 들어갈 수 있다.

 

 ▶Default Interface Method (Java8)

  ▷default 키워드를 통해 기본 implement를 정의 가능함.

  ▷implementes되었을때, 자동으로 default method를 생성하게 됨.

  ▶Default Interface Methodd Extends (상속)

   ▷extends: default method 상속함.

   ▷extends + redeclare: default method가 abstract하게 됨.

   ▷extends + redefine: default method를 override함.

 

 

 

 ▶Static Interface Method (Java8)

  ▷Interface의 이름으로 접근 가능한 Method.

  ▷내용이 정의될 수 있다.

  ▷다른 default, static method에 접근 가능하다.

'컴퓨터 언어 > java' 카테고리의 다른 글

Lambda Expression  (0) 2020.11.16
Collection  (0) 2020.11.16
Inheritance  (0) 2020.11.14
Package  (0) 2020.11.13
Inner class  (0) 2020.11.11

○Inheritance

 ▷subclass가 superclass의 모든 멤버를 상속하는 것.

 ▷subclass는 superclass의 모든 멤버를 가지며, 추가로 새로운 멤버를 정의 가능하다.

 

 ▶선언

  ▷Superclass가 정의된 상태에서, Subclass를 정의함.

  ▷class subclass extends superclass

  ▷sub는 super의 모든 멤버 변수, 메서드를 가지게 된다.

 

 ▶접근

  ▷상속받은 public, protected 멤버들에 접근가능하다.

  ▷protected의 사용은 자제하는 편이 좋다.

  ▷super 키워드를 통해 superclass의 멤버에 접근 가능하다.

 

 

 ▶Overload

  ▷같은 이름의 메소드라도, 매개변수가 다르면 다른 메소드 취급하는 것.

  ▷superclass, subclass간의 Overload가 가능하다.

 

 ▶Override

  ▷superclass의 함수를 재정의하는 것.

  ▷같은 이름의 함수를 subclass에서 재정의한다.

  ▷super 키워드를 통해 원래 superclass의 함수에 접근 가능하다.

  ▷@Override 영역: Override된 함수만 위치 가능하다. (실수 방지)

 

 ▶Constructor

  ▷subclass의 생성자는, superclass의 생성자를 호출 가능하다.

  ▷super(arg1, ...)을 통해 superclass의 생성자를 호출한다.

  ▷다만 그 호출은 subclass의 생성자에서 첫 statement이여야 한다.

 ▶Polymorphism

  ▷superclass 변수는 그 subclass들을 담을 수 있다.

 ▶Abstract class

  ▶abstract method를 가진 class

   ▷abstract method: 선언만 가능하고, 정의가 불가능한 method

   ▷subclass에서 상속받고 Override해야 한다.

   ▷subclass에서 정의되지 않으면 그 class도 abstract class이다.

 

  ▷class에 abstract modifier를 붙여 Abstract class를 만들 수 있다.

 

  ▷abstract class는 객체를 생성하는데 사용할 수 없다.

  ▷subclass를 정의하는데 사용된다.

 

 ▶final method

  ▷더 이상 Override될 수 없는 메소드

 

 

 

※Object Class

 ▷java의 모든 class는 기본적으로 object class를 상속한다.

'컴퓨터 언어 > java' 카테고리의 다른 글

Collection  (0) 2020.11.16
Interface  (0) 2020.11.16
Package  (0) 2020.11.13
Inner class  (0) 2020.11.11
Generic  (0) 2020.11.11

+ Recent posts