TIL / JAVA 2주차(5) / StringBuffer / 예외 (Exception)

병아리코더 아카이브·2023년 8월 25일

JAVA

목록 보기
9/20
post-thumbnail

StringBuffer / StringBuilder

  • String 은 배열이라 용량이 고정되어 있다. 그래서 문자열을 누적하여 추가하거나 하면 객체를 새로 생성하게 된다.
  • 그래서 자주 수정 및 추가하는 경우 StringBuffer 혹은 StringBuilder 를 사용한다.
  • StringBuffer , StringBuilder 는 수정하는 만큼 줄어들고 늘어나기 때문에 용량이 변화하여 새로운 객체를 생성하지 않는다.

StringBuffer 과 StringBuilder 차이점


다수유저 동시 접근은 쓰레드에서 배우게 된다.


예외 ( Exception )

  • 예외는 사용자의 오조작이나 외부 문제로 발생하는 오류다.

에러(Error)와 예외(Exception)의 차이

  • 에러(Error) : 문법을 실수하거나 메모리 사용 문제로 실행에 문제가 생겨 발생하는 오류 -> 실행 자체가 안됨
  • 예외(Exception) : 사용자가 실수하여 조작을 잘못하거나 외부 환경이 받혀주지 못하는 등의 외부 문제로 인해 발생하는 오류
    ( 에러 없이 만든 프로그램이지만 쓰는 사람이 잘못사용하는 경우 )

예외의 종류

  • 일반예외 : 자바에서 미리 알려줌 (Exception)
    빨간줄로 표시하며 JVM 에서 필요하다고 판단되면 자동으로 예외처리를 해준다.
  • 실행예외 : 실행해봐야 알 수 있는 예외. (Runtime Exception)

자주 발생하는 실행예외(Runtime Exception)

  • NullPointerException : null 이 담긴 데이터에 메소드를 호출하려는 등 무언가 하려고 했을 때 발생하는 예외.
  • ArrayIndexOutOfBoundsException : 배열의 크기보다 더 많은 갯수의 값이 들어와 수용할 수 있는 범위를 벗어났을 때 발생하는 예외
  • NumberFormatException : 숫자 형태가 아닌 문자열을 숫자로 변환 하려고 할 때 발생하는 예외
  • ClassCastException : 예를 들어 다형성에 의해 부모클래스 타입의 변수에 자식객체를 할당한 뒤 다시 자식객체 타입으로 돌아가려고 할 경우
    원래 자기 형태가 아닌 다른 형태 로 돌아가게 되면 발생하는 예외

예외처리 ( try-catch / throws )

  • 예외는 불가피한 외부 문제로 인해 발생하므로 프로그램이 정지되지 않게 하려면 예외처리를 해줘야만 한다.
  • 예외 처리에는 try-catchthrows 가 있다.

try-catch

  • try 영역 안에서 예외 발생할 것 같은 코드를 넣고 예외가 발생 시 catch 안의 코드를 발생시킨다.
  • finally 는 예외가 발생하든 아니든 무조건 실행할 코드이다.

  • 예외는 여러개 발생 할 수 있다.

  • 이 때 한개씩 catch 문을 쓸 수도 있지만, 한번에 catch 로 받을 수 있는 multi catch 가 JDK 1.7 부터 지원이 된다.

  • 이외에도 매개변수의 다형성을 이용하여 부모클래스인 Exception e 를 넣어 각각의 예외 타입을 받을 수도 있다.

throws

  • throws 는 책임을 떠넘기는 것이다.
  • throws 는 try-catch 로 처리하는 곳에서 끝난다.
  • 끝까지 책임을 떠넘겨 프로그램 시작점까지 throws 를 할 경우 , JVM 에서 처리하여 예외 내용을 콘솔로 출력하게 된다.

예외 발생시키기

  • 기존 예외 이외에도 새로운 예외를 만들 수 있다.

  • 반드시 일반예외는 Exception 을 상속하고
    실행예외는 RuntimeException 클래스를 상속받아야 한다.

예외발생 예시

  • 여기서는 성인예외와 예약어예외라는 예외를 만들었다.

  • throw new 만든 예외(); 를 사용하면 예외를 강제로 발생시킨다.

  • 여기서는 입력한 아이디가 설정해둔 예약어와 동일하면 작성한 예외를 발생시켰고,
    나이가 20 미만으로 체크할 경우에는 작성한 성인예외를 발생시키고
    throws 를 통해 던졌다.

  • 예외를 발생시키는 JoinModel 객체를 생성하여 reservedCheck 메서드를 실행한다.

  • 이때 예악어예외가 발생 시 e.printStackTrace() 로 에러를 자세히 추적해주는 메서드를 사용한다. ( 개발 시에만 사용하고 완료되면 지워주기 )
    또 입력한 아이디는 예악어라는 경고 메세지도 보내준다.

  • 일반 예외인 성인 예외도 JoinModel 객체의 adultCheck 메서드를 실행한다.

  • 이때 throws를 통해 던진 NumberFormatException 발생 하면 숫자 입력하라는 경고 메세지를 보내준다.
    만들어진 예외인 AdultException 이 발생할 경우엔 마찬가지로 e.printStackTrace() 로 에러를 추적해주고 경고 메세지를 보내준다.

0개의 댓글