⭐️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 |
💕객체 지향 공부 - 시나리오 작성💕 (2) | 2023.05.09 |
💖객체지향 코딩하기💖 (0) | 2023.05.08 |
자바 공부 정권지르기!👊 (2) | 2022.12.21 |