[혼공자] 6주차_예외처리와 API

jini·2025년 8월 10일
0

혼자공부하는자바

목록 보기
6/6

한빛미디어의 <혼자 공부하는 자바>를 요약 정리했습니다.

 

🧊 6주차 미션

기본: p486 10-2 확인 문제 2번 문제 풀고 과정 설명하기

throws에 대한 설명으로 틀린 것은 무엇입니까?
1. 생성자나 메소드의 선언 끝 부분에 사용되어 내부에서 발생된 예외를 떠넘긴다.
2. throws 뒤에는 떠넘겨야 할 예외를 쉼표(,)로 구분해서 기술한다.
3. 모든 예외를 떠넘기기 위해 간단하게 throws Exception으로 작성할 수 있다.
4. 새로운 예외를 발생시키기 위해 사용된다.

정답: 4
-> throws는 예외를 발생시키는 것이 아니라 메소드에서 처리하지 않는 예외를 호출한 곳으로 떠넘기는 역할을 합니다.

 

선택: java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기

-> 🧊 java.lang 패키지에 정리

 

🧊 예외 처리(exception handling)

예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류

  • 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있음

 

[1] 예외와 예외 클래스

  • 일반 예외( = 컴파일러 체크 예외 )
    • 프로그램 실행 시 예외가 발생할 가능성이 높기 떄문에 자바 소스를 컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사
    • 예외 처리 코드가 없다면 컴파일 오류 발생
  • 실행 예외(runtime exception) ( = 컴파일러 넌 체크 예외)
    • 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않음

 

자바에서는 예외를 클래스로 관리

  • JVM은 프로그램을 실행하는 도중에 예외가 바생하면 해당 예외 클래스로 객체를 생성
  • java.lang.Exception 클래스를 상속
    • 일반 예외
      • java.lang.ClassNotFoundException
      • java.lang.InterruptedException
      • ...
      • java.lang.RuntimeException
    • 실행 예외(RuntimeException의 하위 클래스)
      • java.lang.NullPointerException
      • java.lang.ClassCastException
      • java.lang.NumberFormatException
      • ...

 

[2] 실행 예외

NullPointerException
객체 참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생

public class NullPointerExceptionExample {
	public static void main(String[] args) {
    	String data = null;
        System.out.println(data.toString());
    }
}
  • data 변수는 null 값을 가지고 있기 때문에 String 객체를 참조하고 있지 않은데, toString 메소드를 호출하고 있어서 에러 발생

 

ArrayIndexOutOfBoundsException
배열에서 인덱스 범위를 초과할 경우 발생
ex. 길이가 3인 int[] arr = new int[3] 배열을 선언했다면, 배열 항목을 지정하기 위해 arr[0] ~ arr[2]를 사용 가능
-> arr[3]을 사용하면 에러 발생

public class ArrayIndexOutOfBoundsExceptionExample {
	public static void main(String[] args) {
    	String data1 = args[0];
        String data2 = args[1];
        
        System.out.println("args[0]: " + data1);
        System.out.println("args[1]: " + data2);
    }
}
  • 2개의 실행 매개값을 주지 않았기 때문에 에러 발생

 

NumberFormatException
문자열을 숫자로 변환하는 방법

리턴 타입메소드 이름(매개 변수)설명
intInteger.parseInt(String s)주어진 문자열을 정수로 변환해서 리턴
doubleDouble.parseDoube(String s)주어진 문자열을 실수로 변환해서 리턴

매개값인 문자열이 숫자로 변환될 수 있다면 숫자를 리턴하지만, 숫자로 변환될 수 없는 문자가 포함되어 있다면 에러 발생

public class NumberFormatExceptionExample {
	public static void main(String[] args) {
    	String data1 = "100";
        String data2 = "a100";
        
        int value1 = Integer.parseInt(data1);
        int value2 = Integer.parseInt(data2);  // NumberFormatException 발생
    }
}

 

ClassCastException
타입 변환은 상위 클래스와 하위 클래스 간에 발생하고 구현 클래스와 인터페이스 간에도 발생

  • 이러한 관계가 아니라면 클래스는 다른 타입으로 변환할 수 없기 대문에 에러 발생
// 문제 없음
Animal animal = new Dog()
Dog dog = (Dog) animal;

// 에러 발생
Animal animal = new Dog();
Cat cat = (cat) animal;

 

에러를 발생시키지 않으려면 타입 변환 전에 변환이 가능한지 instanceof 연산자로 확인

  • true이면 좌항 객체를 우항 타입으로 변환이 가능하다는 뜻
Animal animal new dog();
if(animal instanceof Dog) {
	Dog dog = (Dog) animal;
} else if(animal instanceof Cat) {
	Cat cat = (Cat) animal;
}

 

[2] 예외 처리

try-catch-finally 블록은 생성자 내부와 메소드 내부에서 작성되어 예외가 발생할 경우 예외 처리를 할 수 있도록 해줌

try {
	// 예외 발생 가능 코드
} catch(예외클래스 e) {
	// 예외 처리
} finally {   
  	// 항상 실행;
}
  • 예외 발생 없이 정상 실행: try -> finally
  • 예외 발생: try -> catch -> finally
  • finally 블록은 생략 가능(try / catch 블록에서 return 문을 사용하더라도 항상 실행

example: Class.forName() 메소드는 매개값으로 주어진 클래스가 존재하면 Class 객체를 리턴하지만, 존재하지 않으면 에러 발생

public class TryCatchFinallyExample {
	public static void main(String[] args) {
    	try {
        	Class clazz = Class.forName("java.lang.String2");
        } catch(ClassNotFoundException e) {
        	System.out.println("클래스가 존재하지 않습니다.");
        }
}

 

[3] 예외 종류에 따른 처리 코드

다중 catch
발생되는 예외별로 예외 처리 코드를 작성

try {
	// ArrayIndexOutOfBoundsException 발생
    // NumberFormatException 발생
} catch(ArrayIndexOutOfBoundsException e) {
	// 예외 처리1
} catch(NumberFormatException e) {
	// 예외 처리2
}

 

catch 순서
상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 함

  • 예외를 처리해줄 catch 블록은 위에서부터 차례대로 검색
try {
	// ArrayIndexOutOfBoundsException 발생
    // 다른 Exception 발생
} catch(ArrayIndexOutOfBoundsException e) {
	// 예외 처리1
} catch(Exception e) {
	// 예외 처리2	
}

 

예외 떠넘기기
throws 키워드로 메소드를 호출한 곳으로 예외를 떠넘길 수 있음

  • 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않는 예외를 호출한 곳으로 떠넘기는 역할
리턴타입 메소드이름(매개변수, ...) throws 예외클래스1, 예외클래스2, ... { }
리턴타입 메소드이름(매개변수, ...) throws Exception { }

 

throws 키워드가 붙어 있는 메소드는 반드시 try 블록 내에서 호출되어야 하고 catch 블록에서 떠넘겨 받은 예외를 처리해야 함

public void method1() {
	try {
    	method2();
    } catch(ClassNotFoundException e) {
    	// 예외 처리 코드
        System.out.println("클래스가 존재하지 않습니다.");
    }
}

public void method2() throws ClassNotFoundException {
	Class clazz = Class.forName("java.lang.String2");
}

 

🧊 java.lang 패키지

  • Object: 자바 클래스의 최상위 클래스로 사용
  • System
    • 표준 입력 장치(키보드)로부터 데이터를 입력받을 때 사용
    • 표준 출력 장치(모니터)로 출력하기 위해 사용
    • 자바 가상 기계를 종료할 때 사용
    • 쓰레기 수집기를 실행 요청할 때 사용
  • Class: 클래스를 메모리로 로딩할 때 사용
  • String: 문자열을 저장하고 여러 가지 정보를 얻을 때 사용
  • Wrapper
    • Byte, Short, Character, Integer, Float, Double, Boolean, Long
    • 기본 타입의 데이터를 갖는 객체를 만들 때 사용
    • 문자열을 기본 타입으로 변활할 때 사용
    • 입력값 검사에 사용
  • Math: 수학 함수를 이용할 때 사용

 

[1] 자바 API(Application Programming Interface) 도큐먼트

프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음

 

[2] Object 클래스

클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않더라도 암시적으로 java.lang.Object 클래스를 상속

  • 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스
  • Object는 자바의 최상위 부모 클래스

 

객체 비교(equals())

public boolean equals(Object obj) { ... }
  • 매개 타입은 Object 인데, 모든 객체가 매개값으로 대입될 수 있음을 말함
  • 논리적으로 동일한 객체면 true, 그렇지 않으면 false return
    • 같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일
Object obj1 = new Object();
Object obj2 = new Object();

boolean result = obj1.equals(obj2);  // obj1: 기준 객체, obj2: 비교 객체
boolean result = (obj1 == obj2);

 

equals() 메소드를 재정의할 때는, 매개값이 기준 객체와 도일한 타입의 객체인지 먼저 확인해야 함

  • Object 타입의 매개 변수는 모든 객체가 매개값으로 제공될 수 있기 때문에 instanceof 연산자로 기준 객체와 동일한 타입인지 확인해야 함
public class Member {
	public String id;
    
    public Member(String id) {
    	this.id = id;
    }
    
    @Override
    public boolean equals(Object obj) {
    	if(obj instanceof Member) {
        	Memeber member = (Member) obj;
            if(id.equals(member.id) {
            	return true;
            }
        }
        return false;
    }
}

 

객체 해시코드(hashCode())
객체 해시코드는 객체를 식별하는 하나의 정수값

  • 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴
  • hashCode() 메소드를 실행해서 리턴된 해시코드 값이 같은지를 봄
  • 해시코드 값이 다르면 다른 객체로 판단하고, 해시코드 값이 같으면 equals() 메소드로 다시 비교
public class KeyExample {
	public static void main(String[] args) {
    	// Key 객체를 식별키로 사용해서 String 값을 저장하는 HashMap 객체 생성
        HashMap<Key String> hashMap = new HashMap<Key, String>();
        
        // 식별키 new Key(1)로 "홍길동"을 저장함
        hashMap.put(new Key(1), "홍길동")
        
        // 식별키 new Key(1)fh "홍길동"을 읽어옴
        String value = hashMap.get(new Key(1));
        System.out.println(value);
     }
}

public class Key {
	...
    @Override
    public int hashCode() {
    	return number;
    }
}

 

객체 문자 정보(toString())
객체의 문자 정보(객체를 문자열로 표현한 값)를 리턴

  • 클래스이름@16진수해시코드
Object obj = new Object();
System.out.println(obj.toString());  // java.lang.Object@de6ced

 

리턴값은 자바 애플리케이션에서는 의미가 없는 정보이므로, 오버라이딩 하여 사용

  • java.util 패키지의 Date 클래스: toString() 메소드를 재정의하여 현재 시스템의 날짜와 시간 정보를 리턴
  • String 클래스: toString() 메소드를 재정의항 저장하고 있는 문자열을 리턴
import java.util.Date;

public class ToStringExample {
	public static void main(Stirng[] args) {
    	Object obj1 = new Object();  // java.lang.Object@16f65612
        Date obj2 = new Date();  // Mon Apr 29 12:12:36 KST 2019
    }
}

 

System.out.println() 메소드
매개값은 콘솔에 출력할 내용인데, 매개값이 기본 타입(byte, short, int, long, float, double, boolean)일 경우, 해당 값을 그대로 출력

  • 매개값으로 객체를 주면 객체의 toString() 메소드를 호출해서 리턴값을 받아 출력

 

[3] System 클래스

자바 프로그램은 운영체제에서 바로 실행되는 것이 아닌 JVM 위에서 실행

  • 프로그램 종료, 키보드로부터 입력, 모니터로 출력, 현재 시간 읽기 등
  • System 클래스의 모든 필드와 메소드는 정적 필드와 정적 메소드로 구성되어 있음

 

프로그램 종료(exit())
현재 실행하고 있는 프로세스를 강제 종료

  • 종료 상태값: int 매개값을 지정하도록 되어 있음
System. exit(0);

// example
public class ExitExample {
	public static void main(String[] args) {
    	for(int i = 0; i < 10; i++) {
        	if(i == 5) {
            	System.exit(0);
                // break
            }
        }
        System.out.println("마무리 코드");
    }
}    

현재 시각 읽기(currentTimeMillis(), nanoTime())
컴퓨터의 시계로부터 현재 시간을 읽어서 밀리세컨드(1/1000초) 단위와 나노세컨드(1/10^9초) 단위의 long 값을 리턴

long time = System.currentTimeMillis();
long time = System.nanoTime();

 

[4] Class 클래스

자바는 클래스와 인터페이스의 메타 데이터를 java.lang 패키지에 소속된 Class 클래스로 관리

  • 메타 데이터: 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보

 

Class 객체 얻기(getClass(), forName())

// 클래스로부터 얻는 방법
Class clazz = 클래스이름.class
Class clazz = Class.forName("패키지...클래스이름")

// 객체로부터 얻는 방법
Class clazz = 참조변수.getClass();

// example
Class clazz = String.class;  // 1
Class clazz = Class.forName("java.lang.String");  // 2
String str = "김자바"; 
Class clazz = str.getClass();  // 3

 

클래스 경로를 활용해서 리소스 절대 경로 얻기
해당 클래스의 파일 경로 정보를 가지고 있기 때문에 이 경로를 활용해서 다른 리소스(이미지, XML, Property 파일)의 경로를 얻을 수 있음

C:\SelfJavaStudy\chap11\bin\sec01
						     | - exam10
                                   | - Car.class
                                   | - photo1.jpg
                                   | - images
                                   	      | - photo2.jpg

// 프로그램 실행 중에 이미지 파일(photo1.jpg, photo2.jpg)의 절대 경로가 필요한 경우
// Car.class를 기준으로 한 상대 경로를 이용해서 절대 경로를 얻음
String photo1Path = clazz.getResource("photo1.jpg").getPath();
String photo2Path = clazz.getResource("photo2.jpg").getPath();

 

[5] String 클래스

문자열을 생성하는 방법과 추출, 비교, 찾기, 분리, 변환 등을 제공하는 메소드

 

String 생성자
자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리

  • String 클래스의 다양한 생성자를 이용해서 직접 String 객체 생서 가능

example: 파일의 내용을 읽거나 네트워크를 통해 받은 데이터는 보통 byte[] 배열이므로 문자열로 변환

// 배열 전체를 String 객체로 생성
String str = new String(byte[] bytes);
// 적절하 문자셋으로 디코딩
String str = new Stirng(byte[] bytes, String charsetName);

// 배열의 offset 인덱스 위치부터 length만큼 String 객체로 생성
String str = new String(byte[] bytes, int offset, int length);
// 지정한 문자셋으로 디코딩
String str = new String(byte[] bytes, int offset, int length, String charsetName)
  • System.in.read(): 키보드에서 입력한 내용을 매개값으로 주어진 바이트 배열에 저장하고 읽은 바이트 수를 리턴

 

String 메소드

  • 리턴타입 -> 메소드 이름(매개변수): 설명
  • char -> charAt(int index): 특정 위치의 문자를 리턴
  • boolean -> equals(Object anObject): 두 문자열을 비교
  • byte[] -> getBytes(): byte[]로 리턴
  • byte[] -> getBytes(Charset charset): 주어진 문자셋으로 인코딩한 byte[]로 리턴
  • int -> indexOf(String str): 문자열 내에서 주어진 문자열의 위치를 리턴
  • int -> length(): 총 문자의 수를 리턴
  • String -> replace(CharSequence target, CharSequence replacement): target 부분을 replacement로 대치한 새로운 문자열을 리턴
  • String -> substring(int beginIndex): beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
  • String -> substring(int beginIndex, int endIndex): beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열을 리턴
  • String -> toLowerCase(): 알파벳 소문자로 변환한 새로운 문자열을 리턴
  • String -> toUpperCase(): 알파벳 대문자로 변환한 새로운 문자열을 리턴
  • String -> trim(): 앞뒤 공백을 제거한 새로운 문자열을 리턴
  • String -> valueOf(int i), valueOf(double d): 기본 타입 값을 문자열로 리턴

 

문자 추출(charAt())
매개값으로 주어진 인덱스의 문자를 리턴(인덱스란 0부터 문자열 길이 -1 까지의 번호)

String subject = "자바 프로그래밍";
char charVBalue = subject.charAt(3);  // 3번 인덱스: 프

 

문자열 비교(equals());
기본 타입(byte, char, short, int, long, float, double, boolean) 변수의 값을 비교할 때에는 == 연산자를 사용

  • 문자열을 비교할 때에는 == 연산자를 사용하면 원하지 않는 결과가 나올 수 있음
String strVar1 = new String("신민철");
String strVar2 = "신민철";
String strVar3 = "신민철";

strVar1 == strVar2  // false
strVar2  == strVar3  // true

// 문자열만을 비교하는 equals() 메소드
strVar1.equals(strVar2)  // true
strVar2.equals(strVar3)  // true
  • 자바는 문자열 리터럴이 동일하다면 동일한 String 객체를 참조

 

바이트 배열로 변환(getBytes())
네트워크로 문자열을 전송하거나, 문자열을 암호화할 때 문자열을 바이트 배열로 변환하는 경우가 있음

  • getBytes(): 시스템의 기본 문자셋으로 인코딩된 바이트 배열을 리턴
  • 특정 문자셋으로 인코딩된 바이트 배열을 얻으려면 두 번째 메소드를 사용
byte[] bytes = "문자열".getBytes();
byte[] bytes = "문자열".getBytes(Charset charset);

// example
try {
	byte[] bytes1 = "문자열".getBytes("EUC-KR");
    byte[] bytes2 = "문자열".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
}
  • EUC-KR: 알파벳은 1바이트, 한글은 2바이트로 변환
  • UTF-8: 알파벳은 1바이트, 한글은 3바이트로 변환

바이트 배열을 다시 문자열로 변환(디코딩)할 때에는 어떤 문자셋으로 인코딩된 바이트 배열이냐에 따라서 디코딩 방법이 다름

  • String(byte[] bytes): 시스템의 기본 문자셋 이용
String str = new String(byte[] bytes, String charsetName);

 

문자열 찾기(indexOf())
매개값으로 주어진 문자열이 시작되는 인덱스를 리턴

  • 주어진 문자열이 포함되어 있지 않으면 -1을 리턴
String subject = "자바 프로그래밍":
int index = subject.indexOf("프로그래밍");  // 3

// example
if( 문자열.indexOf("찾는 문자열") != -1 ) {
	// 포함되어 있는 경우
} else {
	// 포함되어 있지 않은 경우
}

 

문자열 길이(length())
문자열의 길이(문자의 수)를 리턴

String subject = "자바 프로그래밍";
int length = subject.length();  // 8

 

문자열 대치(replace())
첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한 새로운 문자열을 생성하고 리턴

String oldStr = "자바 프로그래밍";
String newStr = oldStr.replace("자바", "JAVA");  // "JAVA 프로그래밍"

 

문자열 잘라내기(substring())
주어진 인덱스에서 문자열을 추출

  • substring(int beginIndex, int endIndex): 주어진 시작과 끝 인덱스 사이의 무자열을 추출
  • substring(int beginIndex): 주어진 인덱스부터 끝까지 문자열을 추출
String ssn = "880815-1234567";
String firstNum = ssm.substring(0, 6);  // 880815
String secondNum = ssn.substring(7);  // 1234567

 

알파벳 소/대문자 변경(toLowerCase(), toUpperCase())

  • toLowerCase(): 문자열을 모두 소문자로 바꾼 새로운 문자열을 생성한 후 리턴
  • toUpperCase(): 문자열을 모두 대문자로 바꾼 새로운 문자열을 생성한 후 리턴
String original = "Java Programming";
String lowerCase = original.toLowerCase();  // java programming
String upperCase = original.toUpperCase();  // JAVA PROGRAMMING
  • original 변수의 "Java Programming" 문자열이 변경된 것은 아님
  • equalsIsIgnoreCase() 메소드를 사용하면 대소문자 무시

 

문자열 앞뒤 공백 잘라내기(trim())
문자열의 앞뒤 공백을 제거한 새로운 문자열을 생성하고 리턴(중간의 공백은 제거하지 않음)

String oldStr = "    자바 프로그래밍    ";
String newStr = oldStr.trim();  // 자바 프로그래밍

 

문자열 변환(valueOf())
기본 타입의 값을 변환

  • String 클래스에는 매개 변수의 타입별로 valueOf() 메소드가 오버로딩 되어 있음
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(double d)
static String valueOf(float f)

 

[6] Wrapper(포장) 클래스

자바는 기본 타입(byte, char, short, int, long, float, double, boolean)의 값을 갖는 객체를 생성 가능

  • 이런 객체를 포장 객체라고 함(기본 타입의 값을 내부에 두고 포장하기 때문)
  • 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없음
  • 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 함

 

박싱(Boxing)과 언박싱(Unboxing)

  • 박싱: 기본 타입의 값을 포장 객체로 만드는 과정
  • 언박싱: 포장 객체에서 기본 타입의 값을 얻어내는 과정
기본 타입의 값을 줄 경우문자열을 줄 경우
Byte obj = new Byte(10);Byte obj = new Byte("10");
Character obj = new Character('가');없음
Short obj = new Short(100);Short obj = new Short("100");
Integer obj = new Integer(1000);Integer obj = new Integer("1000");
Long obj = new Long(10000);Long obj = new Long("10000");
Float obj = new Float(2.5F);Float obj = new Float("2.5F");
Double obj = new Double(3.5);Double obj = new Double("3.5");
Boolean obj = new Boolean(true);Boolean obj = new Boolean("true");

생성자를 이용하지 않고, 포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용할 수도 있음

Integer obj = Integer.valueOf(1000);
Integer obj = Integer.valueOf("1000");

 

자동 박싱과 언박싱
기본 타입 값을 직접 박싱, 언박싱 하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있음

  • 클래스 타입에 기본값이 대입될 경우에 발생

example: int 타입의 값을 Integer 클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer 객체가 생성

Integer obj = 100;  // 자동 박싱

 

자동 언박싱은 기본 타입에 포장 객체가 대입되는 경우와 연산에서 발생
example: Integer 객체를 int 타입 변수에 대입하거나, Integer 객체와 int 값을 연산하면 Integer 객체로부터 int 값이 자동 언박싱되어 연산

Integer obj = new Integer(200);
int value1 = obj;  // 자동 언박싱
int value2 = obj + 100;  // 자동 언박싱

 

문자열을 기본 타입 값으로 변환
포장 클래스의 주요 용도는 기본 타입의 값을 박싱해서 포장 객체로 만드는 것이지만, 문자열을 기본 타입의 값으로 변환할 때에도 많이 사용

  • 대부분의 포장 클래스에는 parse + 기본 타입 이름으로 되어 있는 정적 메소드가 있음
  • byte: num = Byte.parseByte("10");
  • short: num = Short.parseShort("100");
  • int: num = Integer.parseInt("1000");
  • long: num = Long.parseLong("10000");
  • float: num = Float.parseFloat("2.5F");
  • double: num = Double.parseDouble("3.5");
  • boolean: num = Boolean.parseBoolean("true");

 

포장 값 비교
포장 객체는 내부의 값을 비교하기 위해 ==와 != 연산자를 사용하지 않는 것이 좋음

  • 내부의 값을 비교하는 것이 아니라 포장 객체의 참조를 비교
// 동일한 값을 가지고 있지만 == 연산자의 결과는 flase
Integer obj1 = 300;
Integer obj2 = 300;
System.out.println(obj1 == obj2);  // false

 

박싱된 값이 다음 표에 나와있는 범위의 값이라면 ==와 !=연산자로 내부의 값을 바로 비교할 수 있지만, 그 외의 경우에는 언박싱한 값을 얻어 비교를 해야 함

타입값의 범위
booleantrue, false
char\u0000 ~ \u007f
byte, short, int-128 ~ 127

 

[7] Math 클래스

수학 계산에 사용할 수 있는 메소드 제공(모두 정적 메소드)

메소드설명예제 코드리턴값
int abs(int a)절대값int v1 = Math.abs(-5);v1=5
double abs(double a)절대값double v2 = Math.abs(-3.14);v2=3.14
double cell(double a)올림값double v3 = Math.cell(5.3);v3=6.0
double cell(double a)올림값double v4 = Math.cell(-5.3);v4=-5.0
double floor(double a)버림값double v5 = Math.floor(5.3);v5=5.0
double floor(double a)버림값double v6 = Math.floor(-5.3);v6=-6.0
int max(int a, int b)최대값int v7 = Math.max(5, 9);v7=9
double max(double a, double b)최대값double v8 = Math.max(5.3, 2.5);v8=5.3
int min(int a, int b)최소값int v9 = Math.min(5, 9);v9=5
double min(double a, double b)최소값double v10 = Math.min(5.3, 2.5);v10=2.5
double random()랜덤값double v11 = Math.random();0.0 <= v11 < 1.0
double rint(double a)가까운 정수의 실수값double v12 = Math.rint(5.3);v12=5.0
double rint(double a)가까운 정수의 실수값double v13 = Math.rint(5.7);v13=6.0
long round(double a)반올림값long v14 = Math.round(5.3);v14=5
long round(double a)반올림값long v15 = Math.round(5.7);v15=6

 

🧊 java.util 패키지

[1] Date

Date now = new Date();
  • 날짜와 시간 정보를 저장하는 클래스
  • 특정 시점의 연도, 월, 일, 시간 정보가 저장

 

Date 객체의 toString() 메소드는 영문으로 된 날짜를 리턴

  • 원하는 날짜 형식의 문자열을 얻고 싶다면 java.text 패키지의 SimpleDateFormat 클래스와 함께 사용
Date now = new Date();
String strNow1 = now.toString(); 
// Mon Mar 11 17:19:08 KST 2024

SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
String strNow = sdf.format(now);  // 원하는 형식의 날짜 정보를 얻음
// 2024년 3월 11ㅣㄹ 05시 19분 08호
  • SimpleDateFormat 생성자의 매개값은 형식 문자열
    • yyyy: 4자리 연도
    • MM: 2자리 월
    • dd: 2자리 일

 

[2] Calendar

  • 운영체제의 날짜와 시간을 얻을 때 사용
  • 연도, 월, 일, 요일, 오전/오후, 시간 등의 정보가 저장
  • 추상 클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없음
  • Calendar 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 운영체제에 설정되어 있는 시간대를 기준으로 한 Calendar 하위 객체를 얻을 수 있음
Calendar now = Calendar.getInstance();

int year = now.get(Calendar.YEAR);  // 연도를 리턴
int month = now.get(Calendar.MONTH) + 1;  // 월을 리턴
int day = now.get(Calendar.DAY_OF_MONTH);  // 일을 리턴
String week = now.get(Calendar.DAY_OF_WEEK);  // 요일을 리턴
String amPm = now.get(Calendar.AM_PM);  // 오전/오후를 리턴
int hour = now.get(Calendar.HOUR);  // 시를 리턴
int minute = now.get(Calendar.MINUTE);  // 분을 리턴
int second = now.get(Calendar.SECOND);  // 초를 리턴

0개의 댓글