Day 39

dokiru·2023년 3월 24일
0

학원

목록 보기
31/51

퀴즈 피드백 (출력 결과 예상하기)

  • try-catch문 안에서 오류 발생하면 그 안에서 정리되고 끝남
  • 예외 발생하고 처리 해주지 않으면 그대로 프로그램 터져서 종료됨 (그 밑에 있는 코드가 실행되지 않는다)
  • 다중 catch는 위에서부터 상위 클래스에서 하위클래스 순서로 작성. 위에서 catch되서 예외 처리 되면 그 다음 catch문이 아닌 finally나 그 다음 코드로 넘어가게 된다.
public class Quiz {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		test1();
		test2();
		test3();
		test4();
		test5();
		System.out.println("main end");
	}
	public static void test1() {
		try {
			System.out.println("test1 start");
			Test t = new Test();
			System.out.println(t.toString());
			System.out.println("test1 try end");
		} catch(Exception e) {
			System.out.println("test1 catch");
		} finally {
			System.out.println("test1 finally");
		}
	}
	
	public static void test2() {
		try {
			System.out.println("test2 start");
			Test t = null;
			System.out.println(t.toString());
			System.out.println("test2 try end");
		} catch(Exception e) {
			System.out.println("test2 catch");
		} finally {
			System.out.println("test2 finally");
		}
	}
	
	public static void test3() {
		try {
			System.out.println("test3 start");
			Test t = null;
			System.out.println(t.toString());
			System.out.println("test3 try end");
		} catch(Exception e) {
			System.out.println("test3 catch");
		} 
		System.out.println("test3 finally");
	}
	
	public static void test4() {
		try {
			System.out.println("test4 start");
			Test t = null;
			System.out.println(t.toString());
			System.out.println("test4 try end");
		} catch(NullPointerException e) {
			System.out.println("test4 catch null");
		} catch(Exception e) {
			System.out.println("test4 catch");
		} 
		System.out.println("test4 end");
	}
	
	public static void test5() {
		System.out.println("test5 start");
		Test t = null;
		System.out.println(t.toString());
		System.out.println("test5 end");
	}
}

class Test {
	public String toString() {
		return "Test";
	}
}
출력 결과

test1 start
Test
test1 try end
test1 finally
test2 start
test2 catch
test2 finally
test3 start
test3 catch
test3 end
test4 start
test4 catch null
test4 end
test5 start
NullPointerExeption 관련 오류메시지..

throws

  • 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할
  • 예외가 발생할 수 있다고 알려주는 것
  • throws 키워드가 붙어있는 메소드는 반드시 try 블록 내에서 호출되어야 한다. 아니면 throws를 다시 사용해서 예외를 호출한 곳으로 떠 넘겨야 함
public static void test2() throws Exception { 
		// test2를 불렀을 때 Exception이 발생할 수 있다고 알려줌
		try {
			Sample2 s2 = null;
			System.out.println(s2.toString());
		} catch(Exception e) {
			System.out.println("test2 catch 처리");			
		}
	}

사용자 정의 예외와 예외 발생

  • 사용자 정의 예외 클래스의 선언
    : 매개변수가 없는 기본 생성자 + 상속 받은 부모의 생성자를 통해 오류 메세지를 설정해주는 생성자
// 일반 예외 | 실행 예외
public class XXXException extends [Exception | RunTimeException] {
	public XXXException() { }
    public XXXException(String message) {
    	super(message);
        // 부모 생성자를 상속받아서 오류 메세지를 설정해줌
    }
}

throw (예외 발생 시키기)

  • 형식
throw new XXXException();
throw new XXXException("메세지");
  • 새로운 예외 유형을 받는 try-catch문에서는 알맞는 예외 형식으로 받아와야함
void test() {
throw new XXXException("오류닷!");
}

try {
	test();
} catch (XXXException e) {
	System.out.println("예외 캐치");
}

예외 정보 얻기

  1. getMessage : 왜 예외가 발생했는지에 대한 간단한 설명 포함

  2. printStackTrace() : 예외 발생 코드를 추적해서 전부 콘솔에 출력, 어떤 예외가 어디에서 발생했는지 상세하게 출력해주기 때문에 프로그램을 테스트하면서 오류를 찾을 때 활용된다

Java API

: 자바에서 기본적으로 제공하는 라이브러리(library), 프로그램 개발에 자주 사용되는 클래스 및 인터페이스 모음

java.lang 패키지

  • 자바 프로그램의 기본적인 클래스를 담은 패키지
  • 포함된 클래스와 인터페이스는 import없이 사용
  • 아래 설명 외에 StringBuffer, StringBuilder, Math 클래스가 있음
클래스설명
Object자바 클래스의 최상위 클래스
System표준 입력장치(키보드)로부터 데이터를 입력받을 때 사용
표준 출력장치(모니터)로부터 출력할 때 사용
자바 가상 머신을 종료시킬 때 사용
쓰레기 수집기를 실행 요청할 때 사용
Class클래스를 메모리로 로딩할 때 사용
String문자열을 저장하고 여러가지 정보를 얻을 때 사용
Wrapper기본 타입의 데이터를 갖는 객체를 만들 때 사용
문자열을 기본 타입으로 변환할 때 사용
입력값 검사에 사용
Byte, Short, Character, Integer, Float, Double, Boolean


Object 클래스

: 자바의 최상위 부모 클래스로, 다른 클래스를 상속하지 않으면 java.lang.Object를 상속
: Object의 메소드는 모든 클래스에서 사용 가능

  • Object 클래스의 메소드
  1. equals() : 기본적으로 == 연산자와 동일한 결과 리턴(번지 비교) => 객체의 값을 비교하기 위해서는 값만을 비교하는 방식으로 오버라이딩해서 사용해야함

  2. hashCode() : 해시코드란 객체 식별을 위한 하나의 정수값으로 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴한다 => 개별 객체는 해시코드가 모두 다르다 => 때문에 값만을 비교하기 위해서 오버라이딩해서 사용해야 함

  3. toString() : 객체의 문자 정보를 리턴하는 메소드

  • equals와 hashCode를 같이 오버라이딩해서 사용하는 것이 좋다
  • toString을 객체의 정보 출력하는 메서드로 오버라이딩하면 일일이 키로 접근해서 출력하지 않아도 됨..

Wrapper 클래스

: Wrapper 객체란 기본 타입(byte, char, short, int, long, float, double, boolean) 값을 내부에 두고 포장하는 객체

기본 타입포장 타입
byteByte
charChar
shortShort
intInt
longLong
floatFloat
doubleDouble
booleanBoolean
  • boxing과 unboxing
    boxing : 기본 타입의 값을 포장 객체로 만드는 과정
    unboxing : 포장 객체에서 기본 타입의 값을 얻어내는 과정

  • boxing : 생성자 or valueOf 이용

// 기본 타입의 값을 줄 경우
Byte obj = new Byte(10);
Integer obj = Integer.valueOf(1000);

// 문자열을 줄 경우
Byte obj = new Byte("10");
Integer obj = Integer.valueOf("1000");
  • unboxing : 각 포장 클래스마다 가지고 있는 클래스 호출 (기본 타입명 + Value())
ex. byte
num = obj.byteValue();

ex. char
ch = obj.charValue();

String 클래스

: byte[] 배열을 문자열로 변환하는 생성자를 가짐

  1. 리턴타입 char | boolean
리턴타입메소드명(매개변수)설명
charcharAt(int index)특정 위치의 문자리턴
booleanequals(Object anObject)두 문자열을 비교


  1. 리턴타입 byte[]
리턴타입메소드명(매개변수)설명
byte[]getBytes()byte[]로 리턴
byte[]getBytes(Charset charset)주어진 문자셋으로 인코딩한 byte[]로 리턴


  1. 리턴타입 int
리턴타입메소드명(매개변수)설명
intindexOf(String str)문자열내에서 주어진 문자열의 위치를 리턴
intlength()총 문자의 수를 리턴


  1. 리턴타입 String
리턴타입메소드명(매개변수)설명
Stringreplace(CharSequence target, CharSequence replacement)target 부분을 replacement로 대치한 새로운 문자열을 리턴
Stringsubstring(int beginIndex (, int endIndex))beginIndex 위치에서 끝(endIndex)까지 잘라낸 새로운 문자열을 리턴
StringtoLowerCase()알파벳 소문자로 변환한 새로운 문자열을 리턴
StringtoUpperCase()알파벳 대문자로 변환한 새로운 문자열을 리턴
Stringtrim()앞뒤 공백을 제거한 새로운 문자열을 리턴
StringvalueOf(int i)기본 타입값을 문자열로 리턴
valueOf(double d)



List 컬렉션

: 인덱스로 관리, 중복해서 객체 저장 가능(ArrayList, Vector, LinkedList)

List 컬렉션의 특징 및 주요 메소드

기능메소드설명
객체추가boolean add(E e)주어진 객체를 맨끝에 추가
void add(int index, E element)주어진 인덱스에 객체를 추가
set(int index, E element)주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈
객체검색boolean contains(Object o)주어진 객체가 저장되어 있는지 여부
E get(int index)주어진 인덱스에 저장된 객체를 리턴
isEmpty()컬렉션이 비어 있는지 조사
int size()저장되어있는 전체 객체수를 리턴
객체삭제void clear()저장된 모든 객체를 삭제
E remove(int index)주어진 인덱스에 저장된 객체를 삭제
boolean remove(Object o)주어진 객체를 삭제

ArrayList

: 초기 용량 10, 용량 초과하면 자동으로 늘어남 (고정 가능)
: 객체가 제거 되면 그 뒤의 인덱스들이 한칸씩 당겨짐




Set 컬렉션

  • 특징
    : 저장 순서가 유지되지 않음
    : 객체를 중복 저장 불가
    : 하나의 null만 저장 가능
    : HashSet, LinkedHashSet, TreeSet

Set 컬렉션의 특징 및 주요 메소드

: 전체 객체 대상으로 한 번씩 반복해 가져오는 반복자(Iterator) 제공
+ 인덱스로 객체를 검색해서 가져오는 메소드 XXXXX

기능메소드설명
객체추가boolean add(E e)주어진 객체를 저장, 객체가 성공적으로 저장되면 true를 리턴하고 중복 객체면 false를 리턴
객체검색boolean contains(Object o)주어진 객체가 저장되어 있는지 여부
isEmpty()컬렉션이 비어 있는지 조사
Iterator <E> iterator()저장된 객체를 한번씩 가져오는 반복자 리턴
객체삭제void clear()저장된 모든 객체를 삭제
boolean remove(int index)주어진 객체를 삭제

HashSet

Set<E> mySet = new HashSet<E>();
  • 특징
    : 동일 객체 및 동등 객체는 중복 저장하지 않음

  • 동등 객체 판단 방법

ex. 한 문장 안에 들어 있는 알파벳 수 구하기
=> HashSet을 만들어서 문장의 각 인덱스의 위치에 있는 값이 띄어쓰기가 아닐 경우에 안에 넣어준다 (중복되는 값은 들어가지 않음)

String str = "Returns a completion of the value and message";

Set<String> myStrSet = new HashSet<String>();


for (int i = 0; i<str.length(); i++) {
	if (str.charAt(i) != ' ') {
		String target = String.valueOf(str.charAt(i)).toLowerCase();
		myStrSet.add(target);
	}	
}



Map 컬렉션

  • 특징
    : key와 value으로 구성된 Map.Entry 객체를 저장하는 구조 (둘 다 객체)
    : 키는 중복될 수 없지만 값은 중복 저장 가능
    : HashMap, Hashtable, LinkedHashMap, Properties, TreeMap

Map 컬렉션의 특징 및 주요 메소드

기능메소드설명
객체추가V put(K key, V value)주어진 키와 값을 추가, 저장이 되면 값을 리턴
객체검색boolean containsKey(Object key)주어진 키가 있는지 여부
boolean containsValue(Object value)주어진 값이 있는지 여부
Set<Map.Entry<K,V>> entrySet()키와 값의 쌍으로 구성된 모든 Map.Entry객체를 Set에 담아서 리턴
V get(Object key)주어진 키의 값을 리턴
boolean isEmpty()컬렉션이 비어 있는지 여부
Set<K> keySet()모든 키를 Set 객체에 담아서 리턴
int size()저장된 키의 총 수를 리턴
Collection<V> values()저장된 모든 값 Collection에 담아서 리턴
객체삭제void clear()모든 Map.Entry(키와 값)를 삭제
V remove(Object key)주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴

HashMap

Map<K(키), V(값)> map = new HashMap<K(키), V(값)>();
  • 특징
    : 키 객체는 hashCode()와 equals() 재정의해 동등 객체가 될 조건을 정해야함
    : 키 타입은 String을 많이 사용 (문자열이 같으면 동등 객체가 될 수 있도록 hashCode()와 equals() 메소드가 재정의 되어 있기 때문에)

ex. 한 문장 안에서 사용된 알파벳들의 개수 구하기
=> HashMap을 만들어서 사용된 알파벳을 key값으로, 카운트를 값으로 갖는 객체를 넣어준다. 검색했을 때 알파벳 key가 이미 존재하는 경우, 기존의 값을 불러와서 +1 해주는 방식으로 카운트 해준다.

String str = "Returns a completion of the value and message";

Map<String, Integer> myStrMap = new HashMap<String, Integer>();


for (int i = 0; i<str.length(); i++) {
	if (str.charAt(i) != ' ') {
		String target = String.valueOf(str.charAt(i)).toLowerCase();
			 	
	if(myStrMap.containsKey(target)) {
		myStrMap.put(target, myStrMap.get(target) + 1);
	} else {
		myStrMap.put(target, 1);
	}
}
profile
안녕하세요!

0개의 댓글