[Java] java 입문 12 - Stack/String/Exception
[Java] java 입문 12 - Stack/String/Exception
- Array/Hash 복습
- Array[ ] : 고정배열
- ArrayList : 가변배열
- HashMap : 순서가 상관 없고 key값으로 관리하는 Map
- HashSet : 순서가 상관 없고 중복을 제거한 Set
- interface타입인 List를 type으로 설정하여 프로그램을 더욱 유연하게 할 수 있다.
- 마찬가지로 interface type인 Map을 type으로 설정하면 프로그램을 더욱 유연하게 할 수 있다.
- Stack
- push() 는 데이터를 넣는 것이다.
- pop()은 데이터를 빼는 것이다.
- 선입 후출
- 순서가 있는 데이터이다.
- Stack<dataType> 객체명 = new Stack<dataType>();
- push, pop 메서드를 이용할 수 있다.
* 디버그 결과
- 나중에 넣은 데이터가 먼저 pop()된다.
- StringBuilder 이용하기
- Java에서 쓰레기값 처리
String 연결 연산할 때 Heap영역
- 연결연산을 하면 name에는 "kimgura"가 들어간다.
- "kim"과 "gura"는 쓰레기 값이 된다. = 메모리공간이 낭비된다.
StringBuilder 클래스
- 위와 같은 문제를 피하기 위해 StringBuilder 클래스를 이용한다.
- StringBuilder 클래스 : 입력한 문자열을 누적해준다.
- StringBuilder 객체 builder를 생성하여 해당 객체에 입력된 문자를 누적시킨다.
- 입력받는 문자는 Scanner클래스를 이용한다.
- toString() 메소드로 String type으로 builder객체에 누적된 문자열을 얻어와 변수에 저장한다.
*콘솔 출력 결과
equal 메소드 이용하기
- String객체 id값
- String name="김구라" 와 String name=new String("김구라"); 차이점
: 출력값은 같지만 참조값은 다르다.
: name1과 name2의 참조값은 같다.
: name1, name3, name4는 모두 참조값이 다르다.
* 디버깅 결과
- 따라서, 문자열 자체를 비교하고 싶다면 비교연산자를 이용하면 안된다.
- equals 메소드의 이용
- 내용 자체를 비교할 때 이용한다.
* 콘솔 출력 결과
- Exception
- 특정 예외처리하기
- 수를 입력받고 나누기를 하는 메소드이다.
- 0으로 나눌경우 아래와 같은 오류가 발생한다.
- 이러한 오류의 흐름을 제어할 수 있는데 이를 예외처리라고 한다.
- 예외처리는 try{ }catch( ){ }로 할 수 있다.
* InputMismatchException 예외처리하기
- 문자를 입력했을 때 나타나는 오류
- 아래와 같이 printStackTrace를 이용할 수 있다.
- printStackTrace는 예외정보를 출력해준다.
- Exception 부모클래스
* Exception클래스를 이용한 예외처리
- 강제 예외 발생시키기(SQLException)
- throw new SQLException()을 이용한다.
- 실행보장시키기 (finally)
- finally를 이용하면 오류가 나도 안나도 무조건 실행한다.
* ArithmeticException
* InputMismatchException
* 정상실행
- 모두 finally를 이용한 출력은 나타난다.
- Checked Exception vs UnChecked Exception
- RuntimeException 클래스를 상속받지 않았으면 반드시 try~catch 혹은 throws 해야한다.
- RuntimeException 클래스를 상속받았다면 컴파일 오류는 발생하지 않으므로 선택적으로 처리한다.
- InterruptedException 클래스를 예제로 들자면 아래와 같다.
- sleep( )메소드 이용하기
- 마우스 hover를 통해 try~catch 혹은 throws 처리를 해준다.
- throws를 하면 어차피 메인메소드에서 다시 try~catch처리를 해줘야하므로 sleep()메소드에서 try~catch처리를 해주는 것이 효율적이다.
* sleep메소드에서 예외처리 한 경우
* 메인메소드에서 예외처리 한 경우