모든 자바 클래스는 java.lang.Object 클래스를 상속받습니다. Object 클래스는 모든 클래스의 최상위 클래스이기 때문에, 자바의 모든 클래스는 Object 클래스의 메서드를 사용할 수 있습니다.
예를 들어, toString(), equals() 메서드 등이 있습니다.
class Student { // class Student는 컴파일 시 class Student extends Object로 변환됨 }
객체의 정보를 String으로 변환할 때 사용됩니다.
기본적으로는 객체의 클래스 이름과 해시코드가 포함된 문자열을 반환하지만, String이나 Integer 클래스는 이미 재정의되어 있습니다.
@Override public String toString() { return "Student{name='" + name + "', age=" + age + "}"; }
두 인스턴스의 주소 값을 비교하여 true/false를 반환합니다.
인스턴스가 다르더라도 논리적으로 동일한 경우 true를 반환하도록 재정의할 수 있습니다.
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Student student = (Student) obj; return age == student.age && Objects.equals(name, student.name); }
String 클래스는 불변(immutable)입니다. 문자열 값 수정 시 수정된 문자열이 새로 할당되어 메모리 낭비가 발생할 수 있습니다.
String str1 = new String("abc"); String str2 = "abc";
String str1 = "Hello World"; // charAt(int index) // 문자열에서 전달받은 index 위치에 문자만을 추출해서 리턴(반환형은 char) char ch = str1.charAt(6); // 'W' // concat(String str) // 문자열과 전달된 또다른 문자열을 하나로 합쳐서 새로운 문자열로 리턴 String str2 = str1.concat("!!!"); // "Hello World!!!" // contains(CharSequence str) // 문자열과 전달된 문자열이 포함되어 있는지를 반환 boolean containsHello = str1.contains("Hello"); // true // substring(int beginIndex, int endIndex) // 문자열을 beginIndex위치부터 endIndex-1 위치까지 추출해서 리턴 String subStr = str1.substring(6, 11); // "World" // replace(char oldChar, char newChar) // 문자열에서 oldChar문자를 newChar문자로 변환한 채 문자열 리턴 String replacedStr = str1.replace('l', 'c'); // "Hecco Worcd" //문자열.toUpperCase(): String => 문자열을 전부 대문자로 변경해서 리턴 //문자열.toLowerCase(): String => 문자열을 전부 소문자로 변경해서 리턴 String upperStr = str1.toUpperCase(); // "HELLO WORLD" String lowerStr = str1.toLowerCase(); // "hello world" // trim() // 문자열의 앞 뒤 공백을 제거시킨 새 문자열을 리턴 String trimmedStr = " Hello ".trim(); // "Hello" // toCharArray() char[] charArray = str1.toCharArray(); // valueOf() String valueOfStr = String.valueOf(123); // "123"
StringBuffer 클래스는 내부적으로 가변적인 char[]를 사용하여 문자열을 수정할 수 있습니다. 쓰레드 안전 기능을 제공합니다.
StringBuffer sb = new StringBuffer("Hello"); sb.append(" World"); // "Hello World"
StringBuilder 클래스는 StringBuffer와 동일하지만, 쓰레드 안전 기능을 제공하지 않아 단일 쓰레드 프로그램에서 사용하기에 적합합니다.
StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); // "Hello World"
java.lang.Math 클래스는 수학적 연산을 위한 메서드를 제공합니다. 모든 필드는 상수 필드이며, 모든 메서드는 static 메서드입니다.
public class A_Math { public void method01() { System.out.println("파이 : " + Math.PI); System.out.println("랜덤(0~0.99) : " + Math.random()); System.out.println("절대값 : " + Math.abs(-10)); System.out.println("올림 : " + Math.ceil(4.449)); System.out.println("반올림 : " + Math.round(4.449)); System.out.println("버림 : " + Math.floor(4.449)); System.out.println("2의 10제곱 : " + Math.pow(2, 10)); } }
문자열을 구분자를 기준으로 분리하는 클래스입니다.
public class B_String { public void method03() { String str = "Java,Oracle,sql,html,css,spring"; // 구분자를 기준으로 문자열을 분리시키는 방법 // 방법1. 분리된 문자열들을 String[] 배열에 차곡차곡 담고자 할때 // String클래스에서 제공하는 split() 메소드를 사용한다. // 문자열.split(구분자) : String[] String[] arr = str.split(","); for (String st : arr) { System.out.println(st); } //분리된 문자열 배열을 다시 String으로 변경하는 방법 //String.join(구분자, 배열); String str2 = String.join(", ", arr); System.out.println(str2); //방법2. 분리된 문자열들을 각각 토큰으로써 관리가능 //java.util.StringTokenizer클래스를 이용 //StringTokenizer stn = new StringTokenizer(배열, 구분자); StringTokenizer stn = new StringTokenizer(str, ","); while (stn.hasMoreTokens()) { System.out.println(stn.nextToken()); } } }
기본 자료형을 객체로 포장해주는 클래스입니다.
boolean -> (Boolean)
char -> (Character)
byte -> (Byte)
short -> (Short)
int -> (Integer)
long -> (Long)
float -> (Float)
double -> (Double)
public class C_Wrapper { public void method01() { //Boxing : 기본자료형 -> Wrapper클래스 자료형으로 변경 int num1 = 10; int num2 = 20; //System.out.println(num1.equals(num2)); //1. 객체생성구문을 통한 방법 Integer i1 = new Integer(num1); // num1 => i1 Integer i2 = new Integer(num2); // num2 => i2 System.out.println(i1); System.out.println(i2); System.out.println(i1.equals(i2)); //오버라이딩이 되어서 실제 값 비교가 가능 System.out.println(i1.compareTo(i2)); //두 값을 비교햐서 앞쪽이 크면 1반환, 뒤쪽이 크면 -1반환, 같으면 0반환 //2. 객체생성 하지않고 곧바로 대입방법(AutoBoxing) Integer i3 = num1; System.out.println(i3); //객체생성을 통해서 반드시 변환해야하는 경우 -> 문자열을 Integer타입으로 변환하고 싶을 때 Integer i4 = Integer.parseInt("123"); Integer i5 = new Integer("123"); //UnBoxing : Wrapper클래스 자료형 -> 기본자료형 //1. 해당 그 Wrapper클래스에서 제공하는 xxxValue()메소드를 통해서 가능 int num3 = i3.intValue(); int num4 = i4.intValue(); //2. 메소드사용하지않고 바로 대입하는 방법 int num5 = i3; //기본자료형 <--> String String str1 = "10"; String str2 = "15.5"; System.out.println(str1 + str2); //String -> 기본자료형 //"10" -> 10 //"15.5" -> 15.5 //해당 Wrapper클래스.parsewww()사용 int i = Integer.parseInt(str1); double d = Double.parseDouble(str2); System.out.println(i + d); //기본자료형 -> String System.out.println(i + ""); System.out.println(String.valueOf(i) + 10); System.out.println(String.valueOf(d)); }
날짜와 시간을 다루는 클래스입니다.
import java.text.SimpleDateFormat; import java.util.Date; public class D_Date { public void method01() { // 내가 원하는 날짜(2024년 12월 12일)로 세팅 // 1) 생성자를 통해서 생성 Date date2 = new Date(2024 - 1900, 12 - 1, 12); System.out.println(date2); // 2) 기본생성자로 생성한 후에 setter메소드로 값 변환 date1.setYear(2024 - 1900); date1.setMonth(6-1); date1.setDate(28); date1.setHours(9); date1.setMinutes(0); date1.setSeconds(37); System.out.println(date1); System.out.println(date1.getTime()); System.out.println(1900 + date1.getYear() + "년 "); //SimpleDateFormat //시간을 보여주기위한 형식을 지정하는 객체 SimpleDateFormat sdf = new SimpleDateFormat("yyyy년, MM월, dd일, hh시 mm분 ss초"); String date5 = sdf.format(date1); System.out.println(date5); } }