chap 11. 기본 API 클래스

최준영·2021년 11월 29일
0

자바

목록 보기
6/8
post-custom-banner

1. java.lang 패키지


  • 자바의 기본적인 클래스를 담고 있는 패키지이다.
  • 해당 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.

1) Object 클래스

  • extends 키워드로 다른 클래스를 상속하지 않더라도 자바의 모든 클래스는 암시적으로 java.lang.Object 클래스를 상속한다.
  • Object 클래스는 필드가 없고, 생성자와 메소드로 구성되어 있다.

객체비교(equals())

publi boolean equals(Object obj) {...}
  • 두 객체를 비교해서 논리적으로 동등하면 true를 리턴하고, 그렇지 않으면 false를 리턴한다.
  • 논리적으로 동등하다는 것은 같은 객체인지와는 상관 없이 객체가 저장하고 있는 데이터가 동일하다는 뜻이다.

객체 해시코드(hashCode())

  • 객체를 식별하는 하나의 정수값을 말한다.
  • 해당 메소드는 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다.

객체 문자 정보(toString())

  • toString() 메소드는 객체의 문자 정보를 리턴한다. 객체의 문자 정보란 객체를 문자열로 표현한 값을 말한다.
  • 기본적으로 '클래스이름@16진수해시코드'로 구성된 문자 정보를 리턴한다.
  • 이 자체로는 별 값어치 없는 정보이므로 Object의 하위클래스는 해당 메소드를 오버라이딩하여 유익한 정보를 리턴한다.
    • java.util.Date 클래스는 현재 시스템의 날짜와 시간 정보 리턴
    • String 클래스는 저장하고 있는 문자열 리턴

2) System 클래스

  • 자바 프로그램은 운영체제에서 바로 실행되는 것이 아니라 JVM 위에서 실행된다. 따라서 운영체제의 모든 기능을 직접 이용하기 어렵다.
  • 하지만 java.lang 패키지에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. 즉, 프로그램 종료, 키보드로부터 입력, 모니터로 출력, 현재 시간 읽기 등이 가능하다.
  • System 클래스의 모든 필드와 메소드는 정적 필드와 메소드로 구성되어 있다.

프로그램 종료(exit())

  • exit() 메소드는 현재 실행하고 있는 프로세스를 강제 종료시킨다.
  • int 매개값을 지정하도록 되어있는데, 이 값을 종료 상태값이라고 한다. 일반적으로 정상 종료일 경우 0 값을 준다.
System.exit(0);

현재 시간 읽기(currentTimeMillis(), nanoTime())

  • 컴퓨터의 시계로부터 현재 시간을 읽어서 각각 밀리세컨드(1/1000초) 단위와 나노세컨드(1/10^9) 단위의 long 값을 리턴한다.
  • 리턴값은 주로 프로그램의 실행 소요 시간 측정에 사용된다.

3) Class 클래스

  • 자바는 클래스와 인터페이스의 메타 데이터를 java.lang 패키지에 소속된 Class 클래스로 관리한다.
  • 메타데이터란 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보를 말한다.

Class 객체 얻기(get.Class(), forName())

클래스로부터 얻는 방법

  1. Class clazz = 클래스이름.class
  2. Class clazz = Class.forName("패키지...클래스이름")

객체로부터 얻는 방법

  1. Class clazz = 참조변수.getClass();

클래스 경로를 활용해서 리소스 절대 경로 얻기

  • Class 객체는 해당 클래스의 파일 경로 정보를 가지고 있기 때문에 이 경로를 활용해서 다른 리소스 파일(이미지, XML Property 파일)의 경로를 얻을 수 있다. 이 방법은 UI 프로그램에서 많이 활용된다.
String path = clazz.getResource("photo1.jpg").getPath();
String path2 = clazz.getResource("images/photo2.jpg").getPath();

4) String 클래스

  • 자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리된다.
  • 소스상에서 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String 객체를 생성할 수도 있다.
// 배열 전체를 String 객체로 생성
String str = new String(byte[] bytes);

// 지정한 문자셋으로 디코딩
String str = new String(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);

String 주요 메소드

리턴타입메소드 이름(매개변수)설명
charcharAt(int index)특정 위치의 문자 리턴
booleanequals(Object an Object)두 문자열 비교
byte[]getByte[]byte[]로 리턴
byte[]getBytes(Charset charset)주어진 문자셋으로 인코딩한 byte[]로 리턴
intindexOf(string str)문자열 내에서 주어진 문자열의 위치 리턴
intlength()총 문자의 수 리턴
Stringreplace(charSequence target, CharSequence replacement)target 부분을 replacement로 대치한 새로운 문자열을 리턴
Stringsubstring(int beginIndex)beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
StringsubString(int beginIndex, int endIndex)beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열 리턴
StringtoLowerCase()알파벳 소문자로 변환한 새로운 문자열 리턴
StringtoUpperCase()알파벳 대문자로 변환한 새로운 문자열 리턴
Stringtrim()앞뒤 공백을 제거한 새로운 문자열 리턴
StringvalueOf(int i), valueOf(double d), ...기본 타입의 값을 문자열로 리턴
  • 원래 equals()는 Object 클래스의 번지 비교 메소드지만, String 클래스가 재정의 해서 문자열을 비교하도록 변경했다.
  • String 객체의 문자열은 변경이 불가능한 특성을 갖기 때문에 기존 문자열을 수정하는 것이 아닌 완전히 새로운 문자열을 리턴한다.

5) Wrapper 클래스

  • 자바는 기본 타입(byte, char, short, int, long, float, double,boolena)의 값을 갖는 객체를 생성할 수 있다. 이런 객체라고 한다.
  • 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다. 내부의 값을 변경하려면 새로운 포장 객체를 만들어야 한다.
  • java.lang 패키지에 포함되어 있으며, 기본 타입의 첫 문자를 대문자로 바꾼 이름을 가지고 있다.

박싱과 언박싱

  • 기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고, 반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱이라고 한다.

박싱

  • 포장 클래스의 생성자 매개값으로 기본 타입의 값 또는 문자열을 넘겨주면 된다.
    • Character의 경우 문자열을 넘겨줄 수 없다.
  • 각 포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용할 수도 있다.
Byte obj = new Byte(10);
Long obj = new long("10000");

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

언박싱

  • 각 포장 클래스마다 가지고 있는 '기본타입+Value()'메소드를 호출하면 된다.
byte num = obj.bytevalue();

자동 박싱과 언박싱

  • 자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우에 발생한다.
Integer obj = 100;
  • 자동 언박싱은 기본 타입에 포장 객체가 대입되거나 연산에서 발생한다.
Integer obj = new Integer(100);
int value1 = obj;
int value2 = obj + 100;

문자열을 기본 타입 값으로 변환

  • 'parse+기본 타입 이름'으로 되어있는 정적 메소드를 사용한다.
    • char는 없다.
byte num = Byte.parseByte("10");

포장 값 비교

  • 특정 범위의 값은 ==나 !=로 내부의 값을 비교할 수 있지만, 대부분은 그렇지 않기 때문에 equals 메소드를 사용한다.

6) Math 클래스

  • java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공한다.
  • 모두 정적 메소드이므로 Math 클래스로 바로 사용 가능하다.

주요 메소드

  • abs(num) : 절대값 리턴
  • ceil(num) : 올림값 리턴
  • floor(num) : 버림값 리턴
  • max(a, b) : a와 b 중 최대값 리턴
  • min(a, b) : a와 b 중 최소값 리턴
  • random() : 0이상 1 미만의 랜덤값 리턴
  • rint(num) : 가까운 정수의 실수값
  • round(num) : 반올림값 리턴

2. java.util 패키지


  • 프로그램 개발에서 자주 사용되는 자료구조일 뿐만 아니라, 날짜 정보를 제공하는 유용한 API를 포함한다.

1) Date 클래스

  • 특정 시점의 날짜를 표현하는 클래스이다.

  • Date 객체 안에는 특정 시점의 연도, 월, 일, 시간 정보가 저장된다.

  • 객체 간에 날자 정보를 주고받을 때 매개 변수나 리턴 타입으로 주로 사용된다.

  • 해당 객체의 toString() 메소드는 영문으로 된 날짜를 리턴한다.

  • 원하는 날짜 형식의 문자열을 얻으려면 java.text 패키지의 simpleDateFormat 클래스와 함께 사용한다.

Date now = new Date(); // 객체 생성
SimpleDateformat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
String strNow = sdf.format(now); // sdf 형식으로 날짜 출력

2) Calendar 클래스

  • 달력을 표현한 클래스이다.

  • 해당 운영체제의 Calendar 객체를 얻으면, 연도, 월, 일, 요일, 오전/오후, 시간 등의 정보를 얻을 수 있다.

  • 추상 클래스이므로 new 연산자로 인스턴스를 생성할 수 없다. 해당 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로 한 Calendar 하위 객체를 얻을 수 있다.

  • get() 메소드로 날짜와 시간에 대한 정보를 읽을 수 있다.

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);
profile
do for me
post-custom-banner

0개의 댓글