Language/Java

[Java] java 입문 12 - Stack/String/Exception

별토끼. 2017. 5. 23. 18:42
반응형


[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 메소드의 이용
  - 변수명.equals(다른변수명)

  - 내용 자체를 비교할 때 이용한다.


* 콘솔 출력 결과



  • Exception

  • 특정 예외처리하기

 - 수를 입력받고 나누기를 하는 메소드이다.

 - 0으로 나눌경우 아래와 같은 오류가 발생한다.

- 이러한 오류의 흐름을 제어할 수 있는데 이를 예외처리라고 한다.

 - 예외처리는 try{ }catch( ){ }로 할 수 있다.


 * ArithmeticException 예외처리하기


* InputMismatchException 예외처리하기

 - 문자를 입력했을 때 나타나는 오류

 - 아래와 같이 printStackTrace를 이용할 수 있다.

 - printStackTrace는 예외정보를 출력해준다.


  • Exception 부모클래스
  - 위의 두 오류는 모두 Exception클래스가 부모클래스이다.
  - 따라서 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메소드에서 예외처리 한 경우


* 메인메소드에서 예외처리 한 경우


반응형