JAVA를 JAVA라

[JAVA] 21.06.16 본문

JAVA/JAVA 수업

[JAVA] 21.06.16

샛별KIM 2021. 6. 16. 17:38

/*
 *  Collection Map
 * 
 *  List  Set
 * 
 * ArrayList HashSet HashMap
 * 
 * List 순서 O, 중복 O
 * Set 순서 X, 중복 X
 * Map 키-값 형태로 저장합니다.
 *  키는 중복 X, 값은 중복 O
 */

//정리
/* Map은 Key와 value를 가진 집합이며, 중복을 허용하지 않습니다.
 * 즉 한 개의 key와 한 개의 value가 매칭됩니다.
 * java.util 패키지에 여러 집합들을 사용하기 위한 interface와
 * class가 정의되어 있습니다.
 * 
 * HashMap
 * HashMap은 Map Interface를 implements한 클래스로
 * 중복을 허용하지 않습니다.
 * Map의 특징인 Key-Value의 한 쌍으로 구성되어 있습니다.
 * Key 또는 value값으로 null을 허용합니다.
 */

//로그인 하기를 map으로
/* HashTable
 * HashMap과 동일한 내부구조를 가지고 있습니다.
 * HashTable도 키로 사용할 수 있는 객체는 hashCode()와 equals()를 
 * 재정의 해서 동등 객체가 될 조건을 정해야 합니다.
 * hashTable과 차이점은 HashTable은 동기화된 메소드로 구성되었기 때문에
 * 멀티 쓰레드가 동시에 이 메소드를 실행할 수 없고,
 * 하나의 쓰레드가 실행을 완료해야 다른 쓰레드가 실행될 수 있습니다.
 * 그래서 멀티쓰레드 환경에서 안전하게 객체를 추가, 삭제가 가능합니다.
 * 
 * 이것을 쓰레드 안전(thread safe) 이라고 합니다.
 */

/*
 * 스택 stack
 * 쌓아 올리다.
 * 자료를 정해진 방향으로만 쌓을 수 있음
 * 가장 마지막에 입력된 자료가 가장 먼저 읽힌다.
 * 자료 저장 push
 * 자료 읽기 pop
 * 후입 선출 구조 (LIFO) Last In First Out
 * 
 * 큐 Queue
 * 줄 서서 기다리는 것
 * 선입 선출 구조 (FIFO) First In First Out
 * 한쪽에서는 입력이 다른쪽에서는 출력이 실행된다.
 * 먼저 입력된 자료를 먼저 출력한다.
 * 
 * 사용 : 프린트 출력, 프로세스 실행
 */

//2진트리
/* 이진트리는 여러개의 노드(node)가 트리형태로 연결된 구조
 * 루트(root)라고 불리는 하나의 노드에서 시작해 각 노드에
 * 최대 2개의 노드를 연결할 수 있는 구조
 * 
 * 연결된 두 노드를 부모-자식 관계에 있다고 하며 
 * 위에 있는 노드를 부모노드, 아래 있는 노드를 자식노드라고 한다.
 * 하나의 부모노드는 최대 두개의 자식노드와 연결될 수 있다.
 * 
 * 첫번째 저장하는 값은 루트 노드가 되고 두번째 값은 루트 노드에서
 * 값의 크기를 비교하면서 트리를 따라 내려간다.
 * (숫자가 아닌 문자를 저장할 경우 = 문자의 유니코드 값을 비교)
 * 
 * 작은 값은 왼쪽에, 큰 값은 오른쪽에 저장
 * 이렇게 구성하면 왼쪽 마지막 노드가 제일 작은 값,
 * 제일 큰 값이 오른쪽 끝에 위치합니다.
 * 
 * Tree Set
 * 이진 트리를 기반으로 한 set
 * 하나의 노드는 노드 값인 value와 왼쪽과 오른쪽 자식 노드를
 * 참고하기 위한 두개의 변수로 구성되어 있습니다.
 * 
 * TreeSet에 값을 저장하면 자동으로 정렬됨
 * 부모 값과 비교해서 낮은 것은 왼쪽에, 높은 것은 오른쪽에 저장
 * 
 * first()  : 가장 작은 값 리턴
 * last()  : 가장 큰 값 리턴
 * lower(v)  : v보다 작은 바로 아래 값 리턴
 * higher(v)  : v보다 바로 위 객체 리턴
 * floor(v)  : v와 동등한 객체가 있으면 리터, 없으면 바로 아래 값 리턴
 * ceiling(v)  : v와 동등한 객체가 있으면 리턴, 없으면 상위 객체 리턴
 * pollFirst() : 제일 낮은 객체를 꺼내오고 컬렉션에서 삭제
 * pollLast() : 제일 높은 객체를 꺼내오고 컬렉션에서 삭제
 */


//예외처리
/* Exception
 * 자바 예외 핸들링
 * 자바에서는 예외라는 것을 두고 목적에 따라서 처리(핸들링)하도록
 * 설계되어 있습니다.
 * 
 * 일단 예외라는 것 부터 알아 보겠습니다.
 * 예외는 주로 실행 시에 발생되는 모든 에러 상황이라고 정의합니다.
 * 물론 특정 api는 컴파일 시 예외를 처리하지 않으면 컴파일 되지
 * 않는 예외들도 있습니다.
 * 
 * 예외의 정의
 * : 실행 시에 발생할 수 있는 모든 에러 상황들
 * 
 * 자바에서 예외가 발생되는 순서는 대략 아래와 같습니다.
 * 컴파일 -> 실행 -> 실행 중 예외 발생 -> VM이 발생한 예외의 종류 및 내용을 파악한 뒤 예외 객체 생성
 * -> 발생된 코드 밖으로 예외 던지기(throw) -> 예외의 콜 스택에 전이
 * -> main 메소드 밖까지 던지게 되면 프로그램 비정상 종료
 * 
 * 위처럼 예외는 던진다 라고 표현합니다.
 * 또한 예외는 객체이기 때문에 당연히 클래스로 정의되어 있습니다.
 * 
 * 예외의 최고 클래스는 lang 패키지의 Throwable 입니다.
 * 자식으로는 Error와 Exception이 있습니다.
 * 
 * Error 하위 타입은 일반적으로 java 실행기 즉 VM에 관련된
 * 에러 상황들을 정의한 클래스 입니다.
 * 이러한 문제(상황)들은 프로그래머가 처리할 수 없는 것들로
 * VM 즉 JRE의 전반적인 문제입니다.
 * 따라서 프로그래머는 Error 하위 타입들의 예외(에러)는
 * 처리하지 않고 무시합니다. (처리할 수 없습니다.)
 * 
 * 다음 Exception이란 클래스의 하위 타입이 바로 프로그래머가
 * 처리해야 할 예외 타입들 입니다.
 * 따라서 보통 예외다 라고 표현할 때 최고 클래스로는 Excepion 클래스를
 * 말합니다. Throwable 클래스는 자식 클래스로 Error를 가지고 있기 때문에
 * 예외의 최고 클래스로 표현하지 않습니다.
 * 
 * 예외의 종류는 크게 두가지로 나뉩니다.
 * 컴파일러가 관여하지 않으면서 실행시에 예외가 발생할 수도
 * 발생하지 않을 수도 있는 예외를 
 * [알려지지 않는 예외(Unchecked Exception)]
 * 
 * 컴파일러가 관여하는 예외인 [알려진 예외(Checked Exception)]로 구분됩니다.
 * 
 * 구분하는 방법은?
 * Exception 하위 클래스 중 RuntimeException이 있는데
 * 해당 클래스의 자식 클래스들은 모두 알려지지 않은 예외입니다.
 * 나머지는 알려진 예외 입니다.
 * 
 * 422페이지 내용입니다.----------------------------------------------
 * 컴퓨터 하드웨어의 오작동 또는 고장으로 인해 응용프로그램 실행오류가 
 * 발생하는 것을 자바에서는 에러라고 말합니다. (고치지 못하는 것)
 * 에러는 JVM 실행에 문제가 생겼다는 것이므로 JVM 위에서 실행되는
 * 프로그램을 아무리 견고하게 만들어도 결국 실행 불능이 됩니다.
 * 개발자는 이러한 에러를 극복할 방법이 없습니다.
 * 
 * 이런 에러 외 에러를 예외 라고 합니다.
 * 예외는 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해
 * 발생하는 프로그램 오류를 말합니다. 예외가 발생되면 프로그램은 바로
 * 종료됩니다. (이건 에러와 비슷합니다.) 그러나 예외는 예외 처리라는 것을
 * 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있습니다.
 */


//예외 처리 해보기
/*
 * try를 활용하여 오류를 막고 다른 부분까지 실행되게 할 수 있습니다.
 * 
 * 1. 직접 처리 
 * 
 *  try{
 *  예외가 발생할 만한 코드;
 *  } catch(Exception e) {
 *  예외가 발생하면 실행할 코드;
 *  } finally {
 *  예외 발생 유무와 상관 없이 반드시 실행해야 할 코드;
 *  흔히 닫기 문장이 들어간다(닫기();)
 *  }
 * 
 * 
 * 2. 던지기(throw)
 * 
 *  메소드 뒷부분에 throw 처리할 예외 타입을 적어줍니다.
 *  메소드가 실행되다가 예외를 만나면 메소드를 호출한 쪽으로
 *  예외를 던집니다.
 *  main 메소드는 VM으로 던집니다.
 *  (콘솔로그에 빨간 글씨로 떴던 것처럼..) 
 * 
 * 3. 직접 예외 객체 만들어서 처리하기
 *  예외 객체를 만들어서 처리하기
 *  throw 객체명;
 *  @override
 *  public void printStrackTrace(){
 *  super.printstrackTracer();
 *  System.out.println("계산 불가");
 *  }
 */

'JAVA > JAVA 수업' 카테고리의 다른 글

[JAVA & DB] 21.06.21  (0) 2021.06.21
[JAVA & DB] 21.06.18  (0) 2021.06.18
[JAVA] Abstraction, 추상화  (0) 2021.06.15
[JAVA] 상속과 오버라이드  (0) 2021.06.15
[JAVA & DB] 21.06.15  (0) 2021.06.15
Comments