[Java] API - 1. Object, toString, equals, hashCode, CharAt, compareTo, concat, indexOf, trim, lastIndexOf, toLowerCase, toUpperCase, substring, replace, length, isEmpty
API (Application Programming Interface)란?
- 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그램이 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
- 자바 API : 자바 플랫폼 위에서 동작하는 애플리케이션 개발 시 활용 (유용한 클래스 및 인터페이스 제공)
JDK를 설치하면 시스템을 제어하거나 편의 기능을 위한 API를 제공
Object
- 모든 클래스는 Object 클래스의 후손
- java.lang 패키지에 존재
- Object 클래스가 가진 메소드 중 관례상 많이 오버라이딩 해서 사용하는 메소드들이 존재
- 제공하는 메소드 ( toString, equals, hashCode )
toString()
- 인스턴스 생성 시 사용한 full class name과 @ 그리고 16진수 해쉬코드가 문자열로 반환
- 16진수 해쉬코드는 인스턴스의 주소를 가리키는 값으로 인스턴스마다 모두 다르게 반환된다.
System.out.println("book1.toString() : " + book1.toString());
System.out.println("book2.toString() : " + book2.toString());
System.out.println("book3.toString() : " + book3.toString());
//출력값
//book1.toString() : com.greedy.section01.object.book.Book@77cf73f0
//book2.toString() : com.greedy.section01.object.book.Book@fe2839f5
//book3.toString() : com.greedy.section01.object.book.Book@bffcb9f3
equals()
- 매개변수로 전달 받은 인스턴스와 == 연산하여 true 또는 false를 반환
- 동일한 인스턴스인지 비교 (동등객체)
동일 객체 : 주소가 동일한 인스턴스
동등 객체 : 주소가 다르더라도 필드 값이 동일한 인스턴스
Book book1 = new Book(1, "홍길동전", "허균", 50000);
Book book2 = new Book(1, "홍길동전", "허균", 50000);
System.out.println("두 인스턴스의 == 연산 비교 : " + (book1 == book2));
System.out.println("두 인스턴스의 equals() 비교 : " + (book1.equals(book2)));
hashCode()
- 인스턴스의 주소값을 변환하여 생성한 인스턴스의 고유 값을 반환
- 동등객체 생성 후 hashCode를 출력하면 java.lang.Object의 hashCode는 인스턴스 주소이므로 다른 값이 나온다.
오버라이딩해서 동등 객체의 경우 가은 hashCode를 리턴하도록 한다.
Book book1 = new Book(1, "홍길동전", "허균", 50000);
Book book2 = new Book(1, "홍길동전", "허균", 50000);
System.out.println("book1의 hashCode : " + book1.hashCode());
System.out.println("book2의 hashCode : " + book2.hashCode());
//book1의 hashCode : 2010084336
//book2의 hashCode : 2010084336
String 클래스에서 자주 사용되는 메소드
CharAt( )
- 해당 문자열의 특정 인덱스에 해당하는 문자를 반환한다.
- 인덱스는 0부터 시작하는 숫자 체계를 의미하며 인덱스를 벗어난 정수를 인자로 전달하는 경우에는
IndexOutOfBoundsException이 발생
출력값 =>
charAt(0) : a
charAt(1) : p
charAt(2) : p
charAt(3) : l
charAt(4) : e
String str1 = "apple";
for(int i = 0; i < str1.length(); i++) {
System.out.println("charAt(" + i + ") : " + str1.charAt(i));
}
compareTo( )
- 인자로 전달된 문자열과 사전 순으로 비교를 하여 두 문자열이 같다면 0을 반환,
인자로 전달된 문자열보다 작으면 음수를, 크면 양수를 반환한다.
- 단, 이 메소드는 대소문자를 구분하여 비교한다.
String str2 = "java";
String str3 = "java";
String str4 = "JAVA";
String str5 = "oracle";
/* 같으면 0을 반환한다. */
System.out.println("compareTo() : " + (str2.compareTo(str3))); //0
/* 대문자와 소문자는 32만큼 차이가 난다. */
System.out.println("compareTo() : " + (str2.compareTo(str4))); //32
System.out.println("compareTo() : " + (str4.compareTo(str2))); //-32
/* jklmno j부터 o까지 5만큼 차이가 난다. */
System.out.println("compareTo() : " + (str2.compareTo(str5))); //-5
System.out.println("compareTo() : " + (str5.compareTo(str2))); //5
/* 구체적으로 어떤 값이 나오는지보다 양수인지 음수인지를 판단할 목적으로 주로 사용된다. */
/* 대소문자 구분하지 않고 비교한다. */
System.out.println("compareToIngnoreCase() : " + str3.compareToIgnoreCase(str4)); //0
concat()
- 문자열에 인자로 전달된 문자열을 합치기해서 새로운 문자열을 반환한다. 원본 문자열에는 영향X
System.out.println("contact() : " + (str2.concat(str5))); //javaoracle
System.out.println("str2 : " + str2); //java
indexOf()
- 문자열에서 특정 문자를 탐색하여 처음 일치하는 인덱스 위치를 정수형으로 반환한다.
- 단, 일치하는 문자가 없는 경우 -1을 반환한다.
String indexOf = "java oracle";
System.out.println("indexOf('a') : " + indexOf.indexOf('a')); //1
System.out.println("indexOf('z') : " + indexOf.indexOf('z')); //-1
lastIndexOf()
- 문자열 탐색을 뒤에서부터 하고 처음 일치하는 위치의 인덱스를 반환한다.
- 단, 일치하는 문자가 없는 경우 -1을 반환한다.
String indexOf = "java oracle";
System.out.println("lastIndexOf('a') : " + indexOf.lastIndexOf('a')); //7
System.out.println("lastIndexOf('z') : " + indexOf.lastIndexOf('z')); //-1
trim()
- 문자열 앞 뒤에 공백을 제거한 문자열을 반환한다.
String trimStr = " java ";
System.out.println("trimStr : # " + trimStr + "#"); //# java #
System.out.println("trim() : #" + trimStr.trim() + "#"); //#java#
/* 원본에는 영향을 주지 않는다. */
System.out.println("trimStr : # " + trimStr + "#"); //# java #
toLowerCase()
- 모든 문자를 소문자로 변환시킨다.
toUpeerCase()
- 모든 문자를 대문자로 변환시킨다.
- 두 메소드 원본에 영향을 주지 않는다.
String caseStr = "javaOracle";
System.out.println("toLowerCase() : " + caseStr.toLowerCase()); //javaoracle
System.out.println("toUpperCase() : " + caseStr.toUpperCase()); //JAVAORACLE
System.out.println("castStr : " + caseStr); //javaOracle
substring()
- 문자열의 일부를 잘라내어 새로운 문자열을 반환한다.
- 원본에 영향을 주지 않는다.
String javaoracle = "javaoracle";
System.out.println("substring(3, 6) : " + javaoracle.substring(3, 6)); //aor
System.out.println("substring(3) : " + javaoracle.substring(3)); //aoracle
System.out.println("javaoracle : " + javaoracle); //javaoracle
replace()
- 문자열에 대체할 문자열로 기존 문자열을 변경해서 반환한다.
- 원본에 영향을 주지 않는다.
String javaoracle = "javaoracle";
System.out.println("replace() : " + javaoracle.replace("java", "python")); //pytonoracle
System.out.println("javaoracle : " + javaoracle); //javaoracle
length()
- 문자열의 길이를 정수형으로 반환한다
String javaoracle = "javaoracle";
System.out.println("length() : " + javaoracle.length()); //10
System.out.println("빈 문자열의 길이 : " + ("".length())); //0
isEmpty()
- 문자열의 길이가 0이면 true를 반환, 아니면 false를 반환
- 길이가 0인 문자열은 null과 다르다
System.out.println("isEmpty() : " + "".isEmpty()); //true
System.out.println("isEmpty() : " + "abc".isEmpty()); //false