1. API 도큐먼트
▷ 자바 표준 모듈에서 제공하는 라이브러리를 쉽게 찾아서 사용할 수 있도록 도와주는 문서
▷ JDK 버전별로 사용할 수 있는 API 도큐먼트 사이트
▶ https://docs.oracle.com/en/java/javase/index.html
Java Platform, Standard Edition Documentation - Releases
Java Platform, Standard Edition documentation, current and previous releases
docs.oracle.com
2. java.base 모듈
▷ 모든 모듈이 의존하는 기본 모듈 의존하는 기본 모듈로, 모듈 중 유일하게 requires 하지 않아도 사용할 수 있습니다.
NO | 패키지 | 용도 |
1 | java.lang | 자바 언어의 기본 클래스 제공 |
2 | java.util | 자료 구조와 관련된 컬렉션 클래스를 제공 |
3 | java.text | 날짜 및 숫자를 원하는 형태의 문자열로 만들어 주는 포맷 클래스를 제공 |
4 | java.time | 날짜 및 시간을 조작하거나 연산하는 클래스를 제공 |
5 | java.io | 입출력 스트림 클래스를 제공 |
6 | java.net | 네트워크 통신과 관련된 클래스를 제공 |
7 | java.nio | 데이터 저장을 위한 Buffer 및 새로운 입출력 클래스 제공 |
(1) java.lang
▷ 자바 언어의 기본적인 클래스를 담고 있는 패키지.
▷ 이 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있습니다.
◎ Object 클래스
▷ 클래스를 선언할 때 extends 키워들로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속
▶ 자바의 모든 클래스는 Object의 자식이거나 자손 클래스
1. 객체 동등 비교
▷ Object의 equals() 메소드는 객체의 번지를 비교하고 boolean 값을 리턴
public boolean equals(Object obj)
2. 객체 해시코드
▷ 객체를 식별하는 정수. Object의 hashCode() 메소드는 객체의 메모리 번지를 이용해서 해시코드를 생성하기 때문에 객체마다 다른 정수값을 리턴합니다.
public int hashCode()
▷ hashCode()가 리턴하는 정수 값이 같은지 확인하고, equals() 메소드가 true를 리턴하는지 확인해서 동등 객체임을 판단합니다.
3. 객체 문자 정보
▷ 객체를 문자열로 표현한 값. Object의 toString() 메소드는 객체의 문자 정보를 리턴합니다.
▷ 기본적으로 Objcet의 toString() 메소드는 '클래스명@16진수해시코드'로 구성된 문자열을 리턴
Object obj = new Objcet(); System.out.println(obj.toString()); // java.lang.Object@de6ced
4. 레코드 선언
▷ 데이터 전달을 위한 DTO(Data Transfer Object) 작성시 반복적으로 사용되는 코드를 줄이기 위해 도입
◎ 객체 동등 비교 예시
1. Member 클래스
public class Member { public String id; public Member(String id) { this.id = id; } @Override public boolean equals(Object obj) { if(obj instanceof Member target) { if(id.equals(target.id)) { return true; } } return false; } }
▷ obj와 Member가 같은 클래스이면 true를 출력합니다. (instanceof 함수)
▶ obj와 Member가 같은 클래스이면 obj를 Member로 강제 형 변환해서 target에 대입합니다.
▷ 그리고 id가 target.id랑 같으면 true를 출력합니다.
▷ 함수는 한 번 return을 받으면 그대로 실행이 종료됩니다.
2. EqualsExample 메인 클래스
public class EqualsExample { public static void main(String[] args) { Member obj1 = new Member("blue"); Member obj2 = new Member("blue"); Member obj3 = new Member("red"); if(obj1.equals(obj2)) { System.out.println("obj1과 obj2는 동등합니다."); } else { System.out.println("obj1과 obj2는 동등하지 않습니다."); } if(obj1.equals(obj3)) { System.out.println("obj1과 obj3는 동등합니다."); } else { System.out.println("obj1과 obj3는 동등하지 않습니다."); } } } // 출력 : // obj1과 obj2는 동등합니다. // obj1과 obj3는 동등하지 않습니다.
◎ 객체 해시코드 예시
1. Student 클래스
public class Student { private int no; private String name; public Student(int no, String name) { this.no = no; this.name = name; } public int getNo() { return no; } public String getName() { return name; } @Override public int hashCode() { int hashCode = no + name.hashCode(); return hashCode; } @Override public boolean equals(Object obj) { if(obj instanceof Student) { Student target = (Student) obj; if(no == target.getNo() && name.equals(target.getName())) { return true; } } return false; } }
2. HashCodeExample 메인 클래스
▷ equals는 원래 문자열 비교지만 클래스를 비교할 수 있도록 오버라이딩을 시켜줍니다.
public class HashCodeExample { public static void main(String[] args) { Student s1 = new Student(1, "홍길동"); Student s2 = new Student(1, "홍길동"); System.out.println(s1); System.out.println(s2); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); if(s1.hashCode() == s2.hashCode()) { if(s1.equals(s2)) { System.out.println("동등 객체입니다."); } else { System.out.println("데이터가 다르므로 동등 객체가 아닙니다."); } } else { System.out.println("해시코드가 다르므로 동등 객체가 아닙니다."); } } } // 출력 : // hash.Student@33a43af // hash.Student@33a43af // 54150063 // 54150063 // 동등 객체입니다.
▷ s1와 s2는 해쉬코드가 같은 값이지만 실제 주소는 다릅니다.
▶ 그 이유는 new를 통해서 새로운 객체를 생성한 것이기 때문입니다.
▷ if(s1 == s2) 을 하면 주소 값을 비교할 수 있습니다.
◎ HashSet을 이용한 예제
package java0119; import java.util.HashSet; public class HashSetExample { public static void main(String[] args) { HashSet hashSet = new HashSet(); Student s1 = new Student(1, "홍길동"); hashSet.add(s1); System.out.println("저장된 객체 수 : " + hashSet.size()); Student s2 = new Student(1, "홍길동"); hashSet.add(s2); System.out.println("저장된 객체 수 : " + hashSet.size()); Student s3 = new Student(2, "홍길동"); hashSet.add(s3); System.out.println("저장된 객체 수 : " + hashSet.size()); } } // 출력 : // 저장된 객체 수 : 1 // 저장된 객체 수 : 1 // 저장된 객체 수 : 2
▷ HashSet 클래스와 add를 통해서 HashSet 클래스에 Student 객체를 저장합니다.
▷ 동등 객체는 중복 저장되지 않기때문에 총 3개를 저장했지만 결과는 2개만 출력됩니다.
◎ 객체 문자 정보
1. SmartPhone 클래스
public class SmartPhone { private String company; private String os; public SmartPhone(String company, String os) { this.company = company; this.os = os; } @Override public String toString() { return company + ", " + os; } }
2. ToStringExample 메인 클래스
public class ToStringExample { public static void main(String[] args) { SmartPhone myPhone = new SmartPhone("삼성전자", "안드로이드"); String strObj = myPhone.toString(); System.out.println(strObj); System.out.println(myPhone); } } // 출력 : // 삼성전자, 안드로이드 // 삼성전자, 안드로이드
◎ 레코드 선언
1. Member 레코드
public record Member(String id, String name, int age) { }
2. RecordExample 메인 클래스
public class RecordExample { public static void main(String[] args) { Member m = new Member("winter", "눈송이", 25); System.out.println(m.id()); System.out.println(m.name()); System.out.println(m.age()); System.out.println(m.toString()); System.out.println(); Member m1 = new Member("winter", "눈송이", 25); Member m2 = new Member("winter", "눈송이", 25); System.out.println("m1.hashCode() : " + m1.hashCode()); System.out.println("m2.hashCode() : " + m2.hashCode()); System.out.println("m1.equls(m2) : " + m1.equals(m2)); } } // 출력 : // winter // 눈송이 // 25 // Member[id=winter, name=눈송이, age=25] // // m1.hashCode() : 306065155 // m2.hashCode() : 306065155 // m1.equls(m2) : true
▷ java 14부터 레코드를 사용할 수 있습니다.
▷ record를 사용하면 자동으로 getter, setter를 생성해줍니다.
java.lang의 class들에 대해서 익혀보았습니다.
많은 예제들을 보면서 java.lang에 어떤 클래스들이 있는지 어떻게 사용되는지 익히는 것이 중요한 것 같습니다!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

'BackEnd > Java' 카테고리의 다른 글
[java] 이것이 자바다 ch12 문자열 클래스 (0) | 2023.01.19 |
---|---|
[java] 이것이 자바다 ch12 System 클래스 (0) | 2023.01.19 |
[java] ch11 예외 처리 3 (0) | 2023.01.19 |
[java] ch11 예외 처리 2 (0) | 2023.01.19 |
[java] ch11 예외 처리 1 (0) | 2023.01.18 |