11-1. java.lang 패키지

728x90

11-1. java.lang 패키지

[java.lang 패키지]

: 자바 프로그램의 기본 클래스 담고 있는 패키지 ( import 없이 사용 O)

[자바 API 도큐먼트]
API : Application Programming Interface

       **개발에 자주 사용되는 클래스,인터페이스 모음 라이브러리**

-8버전 : 전체 자바 표준 API를 패키지별로 정리
-11버전 : 전체 자바 표준 API를 모듈별로 정리

: 이클립스로 접근 시.

클래스이름 드래그 -> f1키 누르면 자동으로 API 도큐먼트 Help 뷰 -> 링크 클릭

[API 도큐먼트 읽기]
최상단 SUMMARY : 해당 클래스 내에 선언된 멤버의 종류 나열

  1. 클래스의 선언부 확인

-final / abstract 클래스 키워드 확인
-extends 뒤에 언급된 부모 클래스 확인
-implements 뒤에 언급된 인터페이스 확인
2. 필드 목록 확인 : FIELD
3. 생성자 목록 확인 : CONSTR
4. 메소드 목록 확인 : METHOD

🟩[Object 클래스 ]

: 자바의 최상위 부모 클래스

: 자바의 모든 클래스는 Object 클래스의 자식 or 자손 클래스들

[equals () 메소드]

<객체 번지 비교> : 기본 equals() 메소드

: 비교 연산자 ==와 동일 결과

public boolean equals( 모든 객체 ) { ... }

<객체 논리적 동등 비교> : 재정의 equals () 메소드 :

: 1. 타입 일치 2. 데이터값 일치

=> 동일 객체 X 동등 객체 O

1) instanceof 연산자로 타입 일치 여부 확인

2) equlals () 메소드로 내부 필드값 동일 여부 확인 -> true 리턴

@Override
        public boolean equals(Object obj) {
            if(obj instanceof Member) {

                Member member = (Member) obj;

                if(id.equals(member.id)) {
                    return true;
                }
            }
            return false;
        }

[hashCode() 메소드]

<객체 해시코드> : 기본 hashCode() 메소드

: 객체 식별하는 하나의 정수값 리턴, 객체마다 다른 값

<객체의 논리적 동등 비교 > : 재정의 hashCode() 메소드

: 1. hashCode() 리턴값 동일 2.equals() 리턴값 True

=> 동등 객체

@Override
        public int hashCode() {

            return id.hashCode();
        }

[toString() 메소드]

<객체 문자 정보> : 기본 toString() 메소드

: 객체를 문자열로 표현한 객체 문자 정보 리턴

: ‘클래스@16진수해시코드’ 문자 정보 리턴

<Date 클래스 재정의한 toString() 메소드>

: 현재 시스템의 날짜와 시간 정보 리턴

<String 클래스 재정의한 toString() 메소드>

: 저장하고 있는 문자열 리턴

<System.out.println() 메소드 매개값에 ‘객체’ 주기>

: 매개값에 기본타입 - > 해당값 그대로 출력

: 매개값에 객체이름 - > 해당 객체의 toString() 메소드 호출하여 리턴값 출력

🟩[System 클래스]

: 운영체제의 일부 기능을 이용하여 프로그램 종료, 입력, 출력 등 가능

: System 클래스의 모든 필드, 메소드는 static 정적타입 (객체 생성없이 클래스로 직접접근)

[exit() 메소드]

<프로그램 강제 종료> : exit() 메소드

System.exit(0); //프로그램 강제 종료

               cf. break문 -> 해당 블록 탈출

[currentTime() 메소드 / nanoTime() 메소드]

<현재 시간 읽기> : currentTimeMillis() / nanoTime()

currentTimeMillis() 메소드 : 밀리세컨드(1/1000초) 단위로 리턴

nanoTime() 메소드 : 나노세컨드 단위로 리턴

주로 컴퓨터의 현재 시간 읽어서 프로그램 실행 소요 시간 측정에 사용됨

🟩[Class 클래스]

: 클래스. 인터페이스의 메타 데이터를 관리

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

: 주로 Class 객체 얻은 후 -> 정보 얻는 용도로 사용 多

<Class 객체 얻기> : getClass() / forName()

  • 클래스로부터 객체 얻기 (객체 생성X)
  1. Class clazz = 클래스이름.class
  2. Class clazz = Class.forName(“클래스이름”)
  • 객체로부터 객체 얻기 (객체 이미 생성된 경우)
  1. Class clazz = 참조변수.getClass();

<이름 정보 얻기> : getName() / getSimpleName() / getPackage().getName()

  • 클래스 전체 이름 얻기 : getName()
  • 클래스 간단 이름 얻기 : getSimpleName()
  • 패키지 이름 얻기 : getPackage().getName()

<클래스 경로 활용 -> 리소스 절대 경로 얻기> : getResourse().getPath()

String path1 = clazz.getResourse(“photo1.jpg”).getPath();

String path2 = clazz.getResourse(“images/photo2.jpg”).getPath();

🟩[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 클래스 주요 메소드]

1) charAt() 메소드 : 매개값으로 주어진 인덱스 번호 특정 위치의 문자 추출 리턴

2) eqauls() 메소드 : 두 문자열 비교 (Object클래스의 메소드를 String 클래스가 재정의)

3) (인코딩) getBytes() 메소드 : 문자열 -> 바이트 배열로 변환 저장 (인코딩)

  • getBytes() : 기본 문자셋으로 인코딩된 바이트 배열 리턴
  • getBytes( Charset charset) : 특정 문자셋으로 인코딩된 바이트 배열 리턴

: 잘못된 문자셋 매개값 줄 경우

→ java.io.UnsupportedEncodingException 발생

→ 예외처리필요(try/catch문)

++++(디코딩) 바이트 배열 -> 다시 문자열로 변환 (디코딩) : <String 생성자 이용>

  • String str = new String(byte[]bytes) : 기본 문자셋으로 디코딩
  • String str = new String(byte[] bytes, String charsetName) ; 특정 문자셋 디코딩
  • 특정문자셋 = EUC-KR(알파벳 1바이트, 한글 2바이트), UTF-8(알파벳 1바이트, 한글 3바이트) ..

4) indexOf() 메소드 : 매개값으로 주어진 문자열(포함O) -> 시작 위치 인덱스 번호 리턴

: 매개값으로 주어진 문자열(포함X) -> -1 리턴

: 주로 특정 문자열 포함 여부 확인 시에 자주 사용됨

문자열.indexOf(“찾는 문자열”)

5) length() 메소드 : 공백을 포함한 문자열 길이를 리턴

6) replace() 메소드 : 문자열1->문자열2로 대치. 단, 원본 문자열 조작X -> 완전히 new 문자열 생성

참조변수.replace(“문자열1”, “문자열2”); // 문자열1 -> 문자열2 대치

7) substring() 메소드 : 문자열 뽑아 추출

  • substring( int begen, int end) : begin 위치~end 위치의 문자열 뽑아 추출
  • substring (int begin) : begin 지정 위치~ 해당 끝까지 문자열 뽑아 추출

8) 알파벳 소.대문자 변경

  • toLowerCase() 메소드: 문자열을 모두 소문자로 바꾼 new 문자열 객체 리턴
  • toUpperCase() 메소드 : 문자열을 모두 대문자로 바꾼 new 문자열 객체 리턴

<대소문자 관계없이 영어 문자열 비교 시>

 (1) 대소문자 통일 시킨 후 -> equals() 메소드 사용 OR (2) equalsIgnoreCase() 메소드 사용

9) trim () 메소드 : 문자열 앞뒤 공백 잘라낸 new 문자열 생성 후 리턴. (중간 공백 제외)

10) ValueOf() 메소드 : 기본타입 -> 문자열로 변환

매개변수 타입 별 재정의된 VlaueOf(기본타입) 사용

🟩[Wrapper(포장) 클래스]

: 기본타입 값을 갖는 포장 객체 생성

: 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다.

내부의 값을 변경 원하면 - > 내부 값 바꾼 완전히 new 새로운 객체 생성해야 함

박싱(Boxing)

: 기본 타입 값 -> 포장 객체로 만드는 과정

(1) new 생성자 이용 -> ‘박싱’

매개값으로 ‘기본타입의 값’

ex. Integer obj1 = new Integer(100); //해당 기본타입 값을 갖는 포장객체

매개값으로 ‘문자열’

ex. Integer obj = new Ineger(“1000“);  //해당 문자열을 기본타입 값으로 변환한

(2) 정적 valueOf() 메소드 이용 ‘-> 박싱’

  ex. Integer obj = Integer.valueOf(1000); //기본 타입 값 -> 포장 객체 생성 
    ex. Integer obj = Integer.valueOf(“1000”); //해당 문자열을 기본타입 값으로 갖는 포장객체

<자동 박싱, 자동 언박싱>

◾자동 박싱 : 포장 클래스 타입에 기본값 대입될 경우 발생
ex. Integer obj = 100; //포장 클래스 타입에 직접 값이 대입됨
◾자동 언박싱 : 기본 타입에 포장 객체가 대입될 경우 발생

: 포장객체변수와 기본타입 간 연산 시 발생

  ex. Integer obj = new Integer(200);
        int value1 = obj;

    ex. int value2 = obj + 100;

<문자열 -> 기본타입값으로 변환>

: parse_기본타입 메소드() 이용

  ex, int num = Integer.parseInt(“1000”);
    ex, double num = Double.parseDouble(“3.57”);
    ex. boolean bool = Boolean.parseBoolean(“true”);

<포장 객체의 내부 값 비교>

1) 직접 내부 값 언박싱 후 비교

ex. obj1.intValue() == obj2.intValue();

2) 포장클래스의 equals() 메소드로 내부 값 비교

ex. obj1.equals(obj2);

🟩[Math 클래스]

: 수학 계산에 사용할 메소드 제공

: 모두 정적 메소드이므로 Math클래스로 바로 접근해서 사용 O

[Math클래스의 주요 메소드]

1) 절대값 리턴 : abs() 메소드

2) 올림값 리턴 : ceil() 메소드

double v2 = Math.ceil(-5.3); //-5.0 리턴
 **내림값 리턴 : floor() 메소드**
double v3 = Math.floor(5.3); //5.0 리턴

3) 최대값 리턴 : max(a, b) 메소드

int v4 = Math.max(5, 9); // 9 리턴
**최솟값 리턴 : min(a, b) 메소드**
double v5 = Math.min(5.3, 2.5); //2.5리턴

4) 랜덤값 리턴 : random() 메소드

double v6 = Math.random(); // 랜덤값 리턴

5) 가까운 정수의 실수값 리턴 : rint() 메소드

long v7 = Math.rint(5.8); // 6.0 리턴

6) 소숫점 첫째 자리에서 반올림값 리턴 : round() 메소드

1. double v8 = Math.round(5.3); // 5 리턴
2. double v9 = Math.round(5.9); // 6 리턴

<Math.random() 메소드 추가 설명> : 난수 얻기

: 기본적으로 0.0 ~ 0.9 사이의 범위에 속하는 하나의 double 타입 값 리턴

: 메소드 활용하여 다양한 난수 얻기

int num = (int) (Math.random() * n) + start ;

// start ~ (start + n – 1) 에 속하는 범위 속 하나의 정수 랜덤 반환

int num = (int) (Math.randoum() * n) + 1 ;

// 1 ~ n 에 속하는 범위 속 하나의 정수 랜점 반환

11-2. java.util 패키

[java.util 패키지]

: 프로그램 개발 시 자주 사용되는 ‘자료구조’ + ‘날짜 정보 API’ 포함


<날짜 정보 제공 API>

🟩[Date 클래스]

: 특정 시점의 날짜 표현 클래스

  • 현재 시각의 Date객체 생성 -> 영문으로 된 날짜 리턴
Date now = new Date();

String str 1 = now.toString(); //toString() 메소드 호출하여 영문 날짜 리턴

System.out.pritnln(str1);
  • 원하는 날짜 형식의 문자열로 날짜 리턴
Date now = new Date();

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy년 MM월 dd일 hh시 mm분 ss초”);        //import java.text 패키지 별도 포함 필요

String str 2 = sdf.format(now); //format() 메소드 호출하여 원하는 형식 날짜 정보 얻기

System.out.println(str2);

🟩[Calendar 클래스]

: 해당 운영체제의 달력 표현 클래스

: 추상 클래스이므로 new연산자로 객체 생성 불가능

(1) 정적 getInstance() 메소드 이용 -> 현재 운영체제 시간대 기준 하위 객체 생성 후

(2) get() 메소드 이용 -> 날짜와 시간 정보 읽기

728x90

'Java > [문법]_Java(자바)' 카테고리의 다른 글

ch13. 컬렉션 프레임워크  (0) 2021.08.23
ch12. 스레드  (0) 2021.08.23
ch10. 예외 처리  (0) 2021.08.05
ch09. 중첩 클래스와 중첩 인터페이스  (0) 2021.08.05
ch08. 인터페이스  (0) 2021.08.04