본문 바로가기
💾 Backend/자바

💖자바 JDK 제공 기본 클래스💖

by 정람지 2023. 5. 9.

⭐️java.lang 패키지⭐️

 

JAVA의 lang 패키지는 JAVA 프로그래밍에 필요한 가장 기본적인 클래스들이 모여있는 패키지

import 구문으로 호출해야 사용할 수 있는 다른 패키지들과는 달리 lang 패키지는 import 구문 없이도 자동으로 프로그램에 포함

(컴파일 시 import  java.lang.* 자동 추가)

 

ex) java.lang.Integer (Integer 클래스)


1. Object 클래스💖

Object 클래스는 모든 자바 클래스의 최고 조상 클래스

자바의 모든 클래스는 Object 클래스의 모든 메소드를 바로 사용 가능 ( 컴파일 시 extends Object 자동 작성)

 

총 11개의 메소드만으로 구성 (필드 없음)

☘️getClass() 메서드

해당 클래스 객체 리턴함.

getName()과 같이 사용 시 객체의 클래스명을 알 수 있음

 

☘️toString() 메서드

객체 정보(클래스 이름+주소 값)를 문자열로 바꾸어 준다.

재정의 가능 ( String, Integer 클래스 등에서는 이미 재정의되어 있음 )

//toString() 메소드 원형 - 클래스이름@해시코드값(16진수로 바꾼)
getClass.getName() + '@' + Integer.toHexString(hashCode())

+ 출력문에 참조 변수를 넣을 시 자동으로 toString 호출

+ "객체 + 문자열" 연산 시 자동으로 객체.toString()으로 변환되어 연산

 

예시코드

//import  java.lang.* 추가 

class hamster {
	//찍찍
}

public class toSting {
	public static void main(String[] args) {
		hamster HamZik = new hamster();
		
		System.out.println(HamZik);
		System.out.println(HamZik.toSting());
		
	}
}

 

☘️equals() 메서드

두 인스턴스의 주소 값을 비교하여 boolean 값 반환 

 

두 인스턴스가 물리적으로 같다 = 두 인스턴스의 주소 값이 같다.

두 인스턴스가 논리적으로 같다 = 두 인스턴스가 논리적으로 같다.

 

물리적으로 같은 인스턴스인지 == 또는 equals()로 확인 가능 ( equal의 본래 내용은 ==임 )

논리적으로 같은 인스턴스인지 equals()를 재정의하여 확인 가능(String,Integer 클래스)

햄스터 찍찍 = new 햄스터();
햄스터 쮯쮯 = 찍찍; //주소 복사, 두 인스턴스의 메모리 주소값 일치

 

☘️hashCode() 메서드

해시(hash)

정보를 저장하거나 검색할 때 사용하는 자료 구조

객체가 저장되어야 할 위치/저장된 해시 테이블 주소 반환

hashCode = hash(객체) // 객체의 해시 코드 값 반환

두 인스턴스가 같다면 hashCode() 해시코드 값도 같아야 하므로 equals()재정의 시 hashCode() 재정의 필요.

=> 이때 실제 인스턴스의 주소 값이 궁금하면 System.indentityHashCode() 메서드를 이용

 

☘️clone() 메서드

객체를 복제해 또 다른 객체 반환

인스턴스의 멤버 변수 값은 같고 주소 값은 다른 인스턴스 생성

Car car02 = (Car)car01.clone();

단지 필드의 값만을 복사, 필드의 값이 배열이나 인스턴스면 제대로 복제할 수 없음.

 

데이터의 보호를 이유로 Cloneable 인터페이스를 구현한 클래스의 인스턴스만이 사용할 수 있음


2. String 클래스💖

문자열 클래스

String one = new String("one"); // 힙 메모리 할당, 새로운 객체 생성
String two = "two"; // 기존에 만들어진 상수 풀(스트링 리터럴 테이블)의 메모리 주소를 가리킴
String three = "two"; // two와 주소 값이 같음.

☘️final char[ ] 변수

String 클래스에서는 private final char value[]라고 선언된 char형 배열에 문자열을 저장되게 함.

"final" 이므로 불변의 값!

 

💕메소드💕

☘️compareTo() 메서드

  • 문자열이 같으면 0 리턴
  • 이 문자열이 다른 String 보다 사전에 먼저 나오면 음수 리턴
  • 이 문자열이 다른 String 보다 사전에 나중에 나오면 양수 리턴
String eunchae = "chaechae";
String hamster = "ham";
int res = java.compareTo(cpp);
if(res == 0) 
	System.out.println("the same");
else if(res <0) 
	System.out.println(eunchae + " < " + hamster); 
else 
	System.out.println( eunchae + " > " + hamster);

+

==는 문자열이 같은지 비교할 때 사용 X

equals()를 사용하기(재정의되었음)

 

 

☘️concat() 메서

concat() 메소드나 + 연산자로 문자열을 이을 시 새로운 문자열로 다시 저장되게 됨. (주소 값이 달라짐)

+ 연산자로 문자열 연결

피연산자에 문자열이나 객체가 포함되어 있는 경우

객체는 객체.toString()을 호출하여 문자열로 변환하여 연결 

기본 타입 값은 문자열로 변환하여 연결

System.out.print("abcd" + 1 + true + 3.13e-2 + 'E'+ "fgh" ); 
// abcd1true0.0313Efgh 출력

String concat(String str)로 문자열 연결

"I love ".concat("hamster.") 
// "I Love hamster." 리턴

 

☘️trim() 메서드

문자열 앞 뒤 공백 문자(tab, enter, space) 제거한 문자열 리턴

중간공백은 아님

String a = " abcd def ";
String b = " xyz\t";
String c = a.trim(); // c = "abcd def". 문자열 중간에 있는 공백은 제거되지 않음 
String d = b.trim(); // d = "xyz". 스페이스와 '\t' 제거됨

 

☘️length() 메서드

문자열의 길이(16bit Unicode character 갯수)를 리턴

공백 포함

String str1 = "ABC";
String str2 = "A B C";
String str3 = "안녕하세요";
 
System.out.println(str1.length()); // 3
System.out.println(str2.length()); // 5
System.out.println(str3.length()); // 5

 

☘️charAt() 메서드

문자열 내의 문자 접근

String a = "class";
char c = a.charAt(2); // c = 'a'

 

☘️toLowerCase() 메서드

 

☘️toUpperCase() 메서드

소/대문자 변경

 

+

💖StringBuffer, StringBuilder 클래스💖

String 클래스는 final 배열을 쓰므로 문자열 변경,연결이 많을 시 메모리가 많이 낭비됨

이 문제 해결을 위해 StringBuffer, StringBuilder 클래스를 활용함.

 

내부에 final 값이 아닌 char[] 을 가지고 있음 .(변경 시 주소 값 일치)

단 여러 스레드가 동시에 문자열 변경 시 문자열이 안전하게 변경되는 것을 보장 X

하지만 실행 속도가 빠름

StringBuilder buffer = new StringBuilder() // 객체 생성
buffer.append() //append()로 추가 가능
str = buffer.toString(); // toString() 클래스로 문자열로 바꿀 수 있음.

생성 

메소드

append / insert / replace / delete / setLength /...


3. Wrapper 클래스💖

기본 자료형처럼 사용할 수 있는 클래스(매개변수가 객체거나 반환 값이 객체인 경우 등 필요)

 

Integer 클래스💖

생성자

Integer(int n){} // 특정 정수를 매개변수로 받는 경우
Integer(String s){} // 특정 문자열을 매개변수로 받는 경우

 

Integer 클래스의 메소드

☘️~Value() 메서드

클래스 내부의 ~ 자료형 값 리턴

 

☘️valueOf() 메서드 !

생성자 사용 없이 정수/문자열 바로 해당 클래스로 반환받을 수 있음.

"" 문자열로도 객체 생성 가능

 

☘️to~() 메서드

Integer 클래스 내부의 값을 ~로 리턴

 

☘️parse~() 메서드

문자열 매개변수 값을 ~값으로 리턴

 

public class WrapperTest{

	public static void main(String[] args) {
    
            System.out.println(Character.toLowerCase('A')); // 'A'를 소문자로 변환

            char c1='4', c2='F';
            if(Character.isDigit(c1)) System.out.println(c1 + "는 숫자"); // 문자 c1이 숫자이면 true 
            if(Character.isAlphabetic(c2)) System.out.println(c2 + "는 영문자"); // 문자 c2가 영문자이면 true

            System.out.println(Integer.parseInt("-123")); // "-123"을 10진수로 변환 
            System.out.println(Integer.toHexString(28)); // 정수 28을 16진수 문자열로 변환 
            System.out.println(Integer.toBinaryString(28)); // 28을 2진수 문자열로 변환 
            System.out.println(Integer.bitCount(28)); // 28에 대한 2진수의 1의 개수

            Double d = Double.valueOf(3.14);
            System.out.println(d.toString()); // Double을 문자열 "3.14"로 변환 
            System.out.println(Double.parseDouble("3.14")); // 문자열을 실수 3.14로 변환

            boolean b = (4>3); // b는 true
            System.out.println(Boolean.toString(b)); // true를 문자열 "true"로 변환 
            System.out.println(Boolean.parseBoolean("false")); // 문자열을 false로 변환
    } 
}

 

☘️오토박싱 / 언박싱

int 선언하여 사용하는 경우, Integer로 선언하여 사용하는 경우 => 변환 없이 사용 가능

 

오토박싱 : 기본형을 객체형으로 바꾸는 것

언박싱 : 객체형을 기본형으로 꺼내는 것

Integer seven = Integer.valueOf(7); // 박싱
int s = seven.intValue(); //언박싱

Integer seven = 7; // 자동 박싱. 위 코드처럼 자동으로 처리
int s = seven; // 자동 언박싱. 위 코드처럼 자동으로 처리

4. Class 클래스💖

.java 파일이 컴파일될 시 .class 파일 생성 

Class 클래스는 컴파일된 class 파일에 저장된 클래스/인터페이스 정보를 가져오는 데 사용됨.

 

여러 클래스 중 상황에 따라 다른 클래스를 사용해야 할 경우/반환받는 클래스가 어떤 자료형인지 모를 시

=> 클래스 정보를 찾아야 할 때 Class 클래스 활용 

1. Object 클래스의 getClass() 메서드

이미 생성된 인스턴스가 있어야 함.

2. 클래스 파일 이름 Class 변수에 직접 대입하기

3. Class.forName("클래스이름") 메서드

 

클래스를 불러온 뒤

java.lang.reflect 패키지의 Constructor, Method, Field 등의 클래스에서

getConstructors(), getFields(), getMethod() 메서드를 이용하여

클래스의 생성자, 필드, 메서드를 가져올 수 있음

 

☘️newInstance 메소드

class 클래스를 사용하여클래스 정보만을 확인하는 것이 아니라 인스턴스도 생성 가능

햄스터 햄찌1 = new 햄스터();
Class 햄클래스 = Class.forName("classex.햄스터");
햄스터 햄찌2 = (햄스터)햄클래스.newInstance();

5. Math 클래스💖

산술 연산 메소드 제공

모든 메소드는 static 타입 클래스 이름으로 바로 호출 가능

☘️random() 메소드

0.0 이상 1.0 미만의 임의의 double 값을 반환

int num = (int)(Math.random()*1000) %100 + 1; // 1~100 사이의 랜덤 정수 대입

 

+ 번외

💕java.util.Random 클래스 다양한 형태로 난수 발생 가능

nextInt()


번외. Calendar 클래스💖

java.util 패키지에 => import 필요함

 

Calendar 객체 생성 : 

추상클래스이므로 new Calendar()로 생성 불가능. getInstance()로 생성(싱글톤아님)

 

필드

메소드

Calendar now = Calendar.getInstance();

int year = now.get(Calendar.YEAR); // now에 저장된 년도 
int month = now.get(Calendar.MONTH) + 1; // now에 저장된 달

달은 +1해야함!


번외2. StringTokenizer 클래스💖

 

java.util 패키지에 => import 필요함

 

하나의 문자열을 여러 개의 문자열로 분리하기 위해 사용됨 (String.split() 과 유사)

 

구분 문자 : 문자열을 분리할 떄 사용되는 기본문자

토큰 : 구분 문자로 분리된 문자열

String 긴문자열 = "나는&햄스터를&좋아=해"
StringTokenizer 잘라진문자열1 = new StringTokenizer(긴문자열, "&");// 3덩이로 나눠짐
StringTokenizer 잘라진문자열2 = new StringTokenizer(긴문자열, "&="); // 4덩이로 나눠짐

몇 개로 잘라졌는지 확인하기

int 몇덩어리 = 잘라진문자열1.countTokens(); // 3

토큰 하나씩 얻기

String 토큰 = 잘라진문자열1.nextToken();

+

필드(field)

클래스를 구성하는 요소 중 하나로 클래스 내부 멤버

어떠한 데이터를 저장하기 위한 역할을 담당

클래스 내부의 생성자와 메소드 이외의 것 (= 클래스에 포함된 변수)

 

'💾 Backend > 자바' 카테고리의 다른 글

💖자바 제네릭💖  (2) 2023.05.19
💖자바 예외‼️ 처리💖  (0) 2023.05.11
💕객체 지향 공부 - 시나리오 작성💕  (1) 2023.05.09
💖객체지향 코딩하기💖  (0) 2023.05.08
자바 공부 정권지르기!👊  (2) 2022.12.21