[정리] API, 예외 처리(Exception)

2022. 8. 16. 20:16·🚀 from error to study/Java

*API: Application Programming Interface(애플리케이션 프로그램 인터페이스)

 

=> 프로그램들이 서로 상호작용하는 것을 도와주는 매개체

 

<Math 클래스>

== java.lang.Math

: 모든 필드가 상수 필드이며, 모든 메소드가 static 메소드이기 때문에(== 싱글톤 패턴) 객체를 생성해서 불러올 필요가 없음

: 생성자도 private이기 때문에 생성 구문 자체를 사용하지 않음

 

static: 프로그램 시작과 동시에 메모리 영역에 올려두고 공유하며 재사용하는 개념

 

1. 파이: Math.PI

=> 상수 필드로 정의되어 있기 때문에 값을 넣거나 지정할 수 없음

2. 올림: Math.ceil(double)

3. 반올림: Math.round(double)

4. 버림: Math.floor(double)

5. 절대값: Math.abs(int/double/long/float)

6. 최소값: Math.min(int1, int2)

7. 최대값: Math.max(int1, int2)

8. 제곱근: Math.sqrt(double)

9. 제곱: Math.pow(double1, double2)

=> int1의 int2 제곱

10. 랜덤수: Math.random()

=> Math.random()의 기본값 0.0 ~ 0.999999...

 

<String 관련 - StringPool>

1. 생성자 통해서 String 변수에 문자열 담기

=> 매번 생성되는 내용물이 같더라도 서로 다른 공간에 각각 생성됨

 

String str1 = new String("hello"); // new로 새로운 문자열을 만들어 냈음

String str2 = new String("hello"); // == 두 개의 주소값 다름

System.out.ptinln(str1 /* .toString */); // hello

=> 원래는 주소값이 나와야 하지만

=> 실제 담긴 내용물을 출력할 수 있도록 String 클래스에 toString 메소드가 오버라이딩되어 있음

=> 문자열에 .toString()을 굳이 적지 않아도 자동으로 적혀 있다고 봄

 

System.out.ptinln(str1.hashCode()); // 99162322

System.out.ptinln(str2.hashCode()); // 99162322

=> 실제 담긴 내용물을 기반으로 십진수로 변경해서 리턴할 수 있도록 String 클래스에 hashCode메소드가 오버라이딩되어 있음

 

System.out.ptinln(System.identityHashCode(str1)); // 182964700

System.out.ptinln(System.identityHashCode(str2)); // 2018699554

=> 진짜 주소값에 대해 알고 싶을 때 쓰는 메소드!

=> 같은 문자열 hello가 들어가 있지만 주소값은 다름

 

System.out.ptinln(str1 == str2); // false

=> == 으로 비교할 때에는 주소값 비교임

 

System.out.ptinln(str1.equals(str2); // true

=> 원래 Object 클래스에서 제공하는 equals 메소드는 주소값이 일치하는지 비교하는 메소드이나

=> String 클래스의 equals는 내용물 동등 비교를 할 수 있게 하는 메소드로 오버라이딩 됨

 

2. 문자열을 리터럴로 생성

=> 매번 생성되는 내용물이 Heap 영역 안에 StringPool(상수풀)에 생성됨

=> StringPool 공간의 특징: 동일한 문자열이 존재 불가 (== 동일한 문자열은 같은 주소값을 가짐)

 

String str1 = "hello"; // 그냥 변수로 생성

String str2 = "hello"; // 같은 문자열인 셈

 

System.out.println(str1); // hello
System.out.println(str2); // hello

System.out.println(str1.hashCode()); // 99162322
System.out.println(str2.hashCode()); // 99162322

System.out.println(System.identityHashCode(str1)); // 1829164700
System.out.println(System.identityHashCode(str2)); // 1829164700

System.out.println(str1 == str2); // true

 

3. 불변클래스(변하지 않는 클래스)

=> String 객체는 한 번 생성되면 메모리 공간의 내용물이 변하지 않음

=> 기존의 상수풀의 연결이 끊긴 문자열들은 가비지 콜렉터가 알아서 정리해 줌

=> 내용물이 수정되는 게 아니라 매번 새로운 주소값을 참조함

 

String str = "hello";
System.out.println(System.identityHashCode(str)); // 1829164700

str = "goodbye";
System.out.println(System.identityHashCode(str)); // 2018699554

str += "abc"; //str = str + "abc";
System.out.println(System.identityHashCode(str)); // 1311053135

 

<String 관련 - StringMethod>

1. 문자열.charAt(int);

=> 문자열에서 전달받은 index 위치의 문자 하나만 뽑아서 리턴

2. 문자열.concat("string");

=> 문자열과 전달된 또 다른 문자열을 하나로 연이어서 리턴

3.문자열.length();

=> 문자열의 길이 반환

4-1.문자열.subString(int);

=> 문자열의 int번째 위치에서부터 끝까지의 문자열을 추출해서 리턴

4-2 문자열.subString(int1, int2);

=> 문자열의 int1번째 위치에서부터 int2 -1 위치까지 추출해서 리턴

5. 문자열.replace('char1', 'char2');

=> 문자열 중 char1을 char2로 반환한 문자열로 리턴

6. 문자열.trim();

=> 문자열의 앞, 뒤 공백을 모두 제거한 문자열을 리턴

=> 문자열 사이의 공백은 제거하지 못함

=> 문자열 사이의 공백도 제거하고 싶다면 trim메소드 사용 후 replace메소드로 문자열.replace(" ", ""); 사용하면 됨!

7-1. 문자열.toUpperCase();

=> 문자열을 다 대문자로 변경 후 문자열 리턴

7-2. 문자열.toLowerCase();

=> 문자열을 다 소문자로 변경 후 문자열 리턴

8. 문자열.toCharArray()

=> 문자열의 각 문자들을 char[] 배열로 옮겨 담은 후 그 배열을 리턴

String str1 = "hello world";

char[] arr = str1.toCharArray(); // {h, e, l, l, o,  , w, o, r, l, d} 배열이 생긴 것과 같음 

9. String.valueOf(char[] data)

=> 전달된 char[] 배열에 담긴 문자들을 하나의 문자열로 연이어서 리턴

char[] arr = {a, p, p, l, e};

System.out.println(String.valueOf(arr)); // apple 

 

<String 관련 - StringTokenizer> 문자열을 분리시켜서 배열에 담는 방법

1. 구분자를 제시해서 해당 문자열을 분리시키기

=> (1) split 메소드 

=> 문자열.split(String 구분자)

 

String str ="Java,Oracle,JDBC,HTML,Server,Spring";

String[] arr = str.split(",");

=> (2) 향상된 for문

=> for(값을받아줄수있는변수선언문 : 순차적으로접근할배열또는컬렉션명)

for(String s : arr) {

          System.out.println(s);

}

 

2. java.util.StringTokenizer 클래스를 이용하기

=> 분리된 각각의 문자열을 "토큰"(단어) 단위로 취급하고 싶을 때

=> StringTokenizer stn = new StringTokenizer(분리시키고자하는문자열, 구분자);

StringTokenizer stn = new StringTokenizer(str, ",");

System.out.println(stn.countTokens()); // 6

System.out.println(stn.nextTokens()); // Java

System.out.println(stn.countTokens()); // 5

System.out.println(stn.nextTokens()); // Oracle

 

<Wrapper 래퍼 클래스>

: 기본 자료형을 객체 타입으로 포장해 주는 클래스

: 메소드를 호출해야 할 때, 메소드의 매개변수로 기본 자료형 값이 아닌 객체 타입만 요구될 때, 다형성을 적용하고자 할 때 쓰임

 

 *  기본 자료형 <---> Wrapper 클래스
 *  boolean                     Boolean
 *  char                            Character
 *  byte                               Byte
 *  short                             Short
 *  int                                Integer
 *  long                               Long
 *  float                              Float
 *  double                       Double

 

<날짜 관련 클래스>

Date  today = new Date(); // 현재 날짜 및 시간

Date date2 = new Date(2020 -1900, 6 -1, 19); // Fri Jun 19 00:00:00 KST 2020

Date date3 = new Date();

date3 = setYear(2021 - 1900);

date3 = setMonth(7 - 1);

date3 = setDate(30);

System.out.println(date3); // Fri Jul 30 15:44:17 KST 2021

 

//  Date의 형식을 지정하는 객체

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");

 

//sdf 객체에서 제공하는 format() 메소드 호출 시 Date 객체 전달
// => 포맷이 지정된 날짜가 String형으로 변환
// sdf.format(Date객체): 반환형 String형

String formatDate = sdf.format(today);
System.out.println(formatDate); // 2022-08-11-03:54:45

 

*예외 처리(Exception)

 

에러 (오류) 종류

1. 시스템 에러: 컴퓨터의 오작동으로 인해 발생하는 에러

                             => 개발자가 아닌 컴퓨터의 문제이며 소스코드로 해결 안됨

2. 컴파일 에러: 소스코드상의 문법적인 문제로 발생하는 에러

                            => 소스코드 수정으로 해결 가능(이클립스가 빨간 밑줄로 알려 주는 에러)

3. 런타임 에러: 소스코드상으로는 문제가 없는데 프로그램 실행 도중 발생하는 에러

                           => 사용자의 잘못일 수도 있고, 개발자가 예측 가능한 경우를 제대로 처리 안 해 놓은 잘못일 수도 있음

                            => 충분히 예측 가능한 오류들 == UncheckedException

                            => 애초에 예외가 발생하지 않게끔 if문인 "조건문"으로 선처리하여 해결하는 것이 권장됨

4. 논리 에러: 소스코드상의 문법적인 문제도 없고 실행했을 때도 굳이 문제가 되진 않지만 내가 짠 프로그램 의도상 반대로 작동하는 에러

=> 시스템 에러를 제외한 예외들이 발생했을 경우에 대비해서 미리 처리하는 방법을 정의해 두는 것을 예외처리라고 함

=> 예외 처리를 하는 이유: 예외 발생 시 프로그램이 비정상적으로 종료되는 것을 막기 위함임, 반드시 해야 함!

 

*예측 불가능한 예외들(IOException의 자식 클래스)에 대한 예외 처리는 CheckedException이라 하며 반드시 예외처리 해야 함

=> 사람이 아닌 외부 매체와 어떤 "입출력"이라는 과정이 나타날 때 주로 발생함

 

<후처리 예외 처리 방법>

1.  try ~ catch문

=> try {

          실행할코드 (예외가 발생될 법한 구문이 포함되어 있음);

} catch (발생할예외클래스명 변수명) {

          해당 예외가 발생할 경우 실행할 구문;

}

=> catch블럭을 다중으로 작성하려면 범위가 작은 자식 타입의 예외 클래스를 먼저 기술해야 함

 

ex)public void method3() {

System.out.println("배열의 크기를 입력하세요: ");

int size = sc.nextInt();

sc.nextLine();

 

try {

     int[] arr = new int[size];

     System.out.println("100번 인덱스 값: " + arr[100]);

} catch (NegativeArraySizeException e) { // NegativeArraySizeException은 RuntimeException의 자식 클래스

     System.out.println("배열의 크기로는 음수를 제시할 수 없습니다.");

 

} catch (RuntimeException e) { // RuntimeException은 NegativeArraySizeException의 자식 클래스

     System.out.println("예외가 발생하긴 했음");

2. throw(== 떠넘기기, 위임하기)

=> 떠넘기기를 받은 메소드에서는 결국 try ~ catch문으로 예외처리를 해 주거나, main 메소드까지 넘어갔을 경우 JVM이 직접 예외처리를 실행함

=> public void 메소드명() throws 예외처리할예외이름 {

 

 

 

저작자표시 (새창열림)
'🚀 from error to study/Java' 카테고리의 다른 글
  • [문법] 향상된 for문
  • [정리] IO(입출력)
  • [정리] 상속과 다형성, 오버라이딩, 추상클래스, 인터페이스
  • 코드 블럭 사용 연습
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[정리] API, 예외 처리(Exception)
상단으로

티스토리툴바