back-end/JAVA

[수업-java] 10. API

HAyooni 2022. 8. 6. 17:59

API (Application Programming Interface)

- 정의된 프로토콜을 기반으로 상호 작용을 할 수 있도록 일종의 약속된 시스템

 

String

 

1. 문자열 수정 불가능 (불변클래스)

예) String name ="abc";

name = "def" 라고 재정의했을 때 값이 수정된 것이 아닌 새로 넣어지는 것이다.

String str1 = "java";

String str2 = "java";

String str3 = new String("java");


System.out.println("str1과 str2의 주소는 같은가? " + (str1 == str2)); // 결과 값 : true

System.out.println("str1과 str3의 주소는 같은가? " + (str1 == str3)); // 결과 값 : false

System.out.println(str1);

System.out.println(str2);

System.out.println(str3); // Object 클래스의 toString()를 오버라이딩했기때문에 주소값이 아닌 java가 뜬다.

 

1) hashCode() : 객체의 주소값을 해시코드로 구현한 결과 값

System.out.println("str1의 hashcode : " + str1.hashCode());

System.out.println("str2의 hashcode : " + str2.hashCode());

System.out.println("str3의 hashcode : " + str3.hashCode());

 

- > 결과 값 : str1(2,3)의 hashcode : 3254818

동일한 결과가 나오는 것을 알 수 있다.

여기서 잠깐, 다른 주소 값을 갖고 있는 두 객체가 해시코드로 구현했을 때는 왜 같은 값이 나올까? hashcode에 관한 설명을 찾아보면 다음과 같다.

If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.

출처 입력

(나말고 번역기가)해석하자면, equals() 메소드에 따라 두 객체가 같은 값을 가지고 있다면 두 객체에 대해 hashcode() 메소드를 호출했을 때 동일한 결과가 나온다는 뜻이다.

 

 

2) identityHashCode() : 각 객체가 가지고 있는 실주소값을 반환

System.out.println("str1의 실주소값 : " + System.identityHashCode(str1));

System.out.println("str2의 실주소값 : " + System.identityHashCode(str2));

System.out.println("str3의 실주소값 : " + System.identityHashCode(str3));

 

-> 결과 값 : str1의 실주소값 : 1829164700 str2의 실주소값 : 1829164700 str3의 실주소값 : 2018699554

 

2. 문자열 수정 가능(가변클래스)

String 클래스는 변경이 적고 읽기만 많은 경우 적합하고 문자열에 대한 수정이 많이 일어난다면 StringBuffer/ StringBuilder가 적합하다.

 

1) StringBuffer / StringBuilder

 

동기화 처리의 차이 StringBuffer (동기화 o , 안전하지만 처리 속도가 느림) / StringBuilder (동기화 x, 처리 속도가 빠름)

StringBuffer buffer1 = new StringBuffer();

System.out.println("초기 buffer1의 수용량 : " + buffer1.capacity());

System.out.println("buffer1에 들어있는 실제 값의 길이 : " + buffer1.length());


System.out.println();


StringBuffer buffer2 = new StringBuffer(100);

System.out.println("초기 buffer2의 수용량 : " + buffer2.capacity());

System.out.println("buffer2에 들어있는 실제 값의 길이 : " + buffer2.length());


System.out.println();


StringBuffer buffer3 = new StringBuffer("abc");

System.out.println("초기 buffer3의 수용량 : " + buffer3.capacity());

System.out.println("buffer3에 들어있는 실제 값의 길이 : " + buffer3.length());

// 초기수용량 16에서 길이만큼 수용량 증가


System.out.println("buffer3의 실주소값 : " + System.identityHashCode(buffer3));

 

2) append() 원래 있었던 문자열에서 추가로 더해주는 메소드

append()로 추가한 경우에는 수용량의 변화가 없다.

 

buffer3.append("abc");

System.out.println(buffer3);

System.out.println("buffer3의 실주소값 : " + System.identityHashCode(buffer3));

System.out.println("초기 buffer3의 수용량 : " + buffer3.capacity()); // 19

System.out.println("buffer3에 들어있는 실제 값의 길이 : " + buffer3.length());// 6 


buffer3.append("def").append("abc");

System.out.println(buffer3);

System.out.println("buffer3의 실주소값 : " + System.identityHashCode(buffer3));

System.out.println("초기 buffer3의 수용량 : " + buffer3.capacity()); // 19

System.out.println("buffer3에 들어있는 실제 값의 길이 : " + buffer3.length()); // 12

 

3) insert() : 원하는 자리에 값 추가

buffer3.insert(2, "zzz");

System.out.println("인덱스 2에 zzz 추가 후의 buffer3 : " + buffer3);

// 결과 : abzzzcabcdefabc
 

4) delete(int start, ine end) : StringBuffer 지정 데이터를 삭제 (start <= index < end)

buffer3.delete(2,5);

System.out.println("인덱스 2부터 5까지 삭제한 buffer3 : " + buffer3);

// 결과 값 : abcabcdefabc
 

5) reverse() : 처음과 끝을 반대로 출력

buffer3.reverse();

System.out.println("reverse 후의 buffer3 : " + buffer3);

// 결과 값 : reverse 후의 buffer3 : cbafedcbacba
 

 

 

 

String str = "Hello World";

 

6) charAt(int index) : char ==> 문자열의 index 번째의 char 반환

char ch = str.charAt(4);

System.out.println(ch);

// 결과 값 : o
 

 

7) concat(String str) : String 원래문자열 끝에 매개 변수로 들어온 값을 이어붙인 문자열 반환

String concatStr = str.concat("!!!");

System.out.println("concatStr : " + concatStr);


// 결과 값 : concatStr : Hello World!!!
 

 

8) equals(Object anObject) : boolean == > 문자열이 같은지 확인

System.out.println("concatStr.equals(str) : " + concatStr.equals(str));

// 결과 값 : true
 

 

9) substring(int beginIndex) : String ==> 입력한 값의 자릿수부터 부분반환

System.out.println("str.substring(6) : " + str.substring(6));

System.out.println("str.substring(0,4) : " + str.substring(0, 4));

/* 결과 값 : str.substring(6) : World!!!
            str.substring(0,4) : Hell */
 

 

 

10) replace(char oldchar, char, newChar)String ==> 기존 문자를 새로운 문자로 대체하여 반환

System.out.println("str.replace('1','e') : " + str.replace('1', 'e'));

// 결과 값 : str.replace('1','e') : Hello World!!!
 

 

11) toUpperCase()/toLowerCase: String ==>문자열을 대/소문자로 전환

System.out.println("str.toUpperCase() :" + str.toUpperCase());

System.out.println("str.toLowerCase() : " + str.toLowerCase());


/* 결과 값 : str.toUpperCase() :HELLO WORLD!!!
            str.toLowerCase() : hello world!!! */
 

 

12) equalsIgnoreCase(String anotherString) : 대소문자 구분없이 boolean 값 반환

String str2 = "Wonderful";

String str3 = "wonderful";

System.out.println(str2.equals(str3));

System.out.println(str2.equalsIgnoreCase(str3));

/* 결과 값 : false 
            true */
 

 

13) trim():String : 앞 뒤에 있는 빈공간을 제거한 문자열 반환

 

 

15) split(String str) : String[] == > 전달받은 구분자를 통해 문자열을 자른 후 String[] 반환

String splitStr = "java, Oracle, JDBC, Front, Server, Framework";

String[] strArr =splitStr.split(", ");

for(int i =0; i <strArr.length; i++) {

System.out.println(strArr[i]);

}

/* 결과 값 : java
            Oracle
            JDBC
            Front
            Server
            Framework   */
 

Wrapper

1) boxing / unBoxing : 기본 자료형을 wrapper클래스로 변환 / wrapper클래스를 기본자료형으로 변환

2) parsing : 문자열을 기본자료형으로 변환

3) charAt() : character 클래스의 경우에는 charAt() 메소드 이용

 


Date

1) Date : 현재 시간에 대한 정보를 가지고 객체를 생성

2) Calendar. : 날짜 출력 (월의 경우 제로베이스라 0월부터 시작)

 


Math

1)Math.abs : 절대값

2)Math.ceil : 올림

3)Math.round : 반올림

4)Math.floor : 내림

5)Math.max : 둘 중 최대값

6)Math.min : 둘 중 최소값