22강 API - I - JAVA필수 API - String의 이해 - String의 문제점 - StringBuffer와 StringBuilder의 등장 - 날짜(Calendar) API Lecturer Kim Myoung-Ho Nickname 블스 blogstudy@naver.com
22-1. JAVA필수 API 고수준언어 vs 저수준언어 이러한 클래스들을 이용해서 개발자들은 깊은 지식이 없이, 그냥 사용만 하면 되고, 이러한 기능들을 정의해둔 클래스들을 API(Application Programming Interface)라고 합니다. 그냥 쉽게 말하자면, API란, 누군가가 만들어 놓은 기능들이라고 생각하면 됩니다. 고수준언어 vs 저수준언어 다소 말이 유치하지만, 다들 이렇게 불러서 저도 이렇게 부릅니다. 고수준 언어란 주로 인간이 이해하기 쉬운 언어이고, 저수준 언어는 인간이 쉽게 이해하기 어려운 언어 입니다. 초등학교 5학년때 였습니다. 약 30년전일 입니다. 저는 컵퓨터 학원에 가서 컴퓨터를 처음 접하게 되었습니다. 그리고 한달 후 그만 뒀습니다. 이유는 그 당시에 학원의 수업내용은 지금의 JAVA와 같은 인간이 이해하기 쉬운 고수준의 언어가 아닌, 기계와 더 가까운 언어였습니다. 칼라 모니터도 아닌 흑백 모니터에 알 수 없는 프로그래밍이 돌아가고, 저는 도대체 뭘 하는지도 모르고 한달 이 지나갔습니다. 이처럼 예전에 아주 예전에는 인간이 이해하기 어려운 저수준의 언어가 많았습니다. 하지만, 요즘은 인간이 이해하기 쉬운 고수준의 언어가 많습니다. 물론 지금도 시스템 또는 하드웨어 개발자들은 저수준의 언어를 많이 사용 합니다. 우리는 지금 고수준의 JAVA를 배우고 있으니, JAVA API에서 제공하는 이해하기 쉬운 클래스들을 익혀 나가면 됩니다. 그리고 그 중에서도 자주 쓰이는 API만 익히고, 나머지는 프로젝트를 하면서 조금씩 익혀나가면 됩니다. 참고로 JAVA에는 3,000개가 넘는 클래스가 있습니다. 무슨 말인지 아시겠죠. 모두 알 수없다는 것입니다. 그때그때 조금씩 익혀나가면 됩니다.
String string = “HelloWorld~~”; 그 동안 여러 번 사용 하였던 String API에 대해서 알아보겠습니다. String은 분명 객체 자료형 입니다. 우리가 문자열을 사용하면서 아래와 같이 사용 하였습니다. String string = “HelloWorld~~”; 뭔가 이상한 점이 느껴 지시나요? String은 분명 대문자로 시작하므로, 기초데이터가 아닌 객체데이터 입니다. 하지만 뒤에 생성자(new)를 사용하지 않고 기초데이터를 만들 때 처럼 초기화 하고 있습니다. int i = 10; String의 경우만 특이하게 객체데이터 이지만, 기초데이터처럼 사용할 수 있게 하였습니다. 이유는 아마도 많이 쓰이는 객체라서 편하게 사용하라고 고슬린 형님이 그렇게 만든 거 같습니다. 그럼 아래의 두 경우 모두 사용할 수 있습니다. String string = “HelloWorld”; String string = new String(“HelloWorld~~”);
22-2. String의 이해 String의 주요 기능들(메소드) concat : 문자열 연결 substring : 문자열 자르기 length : 문자열 길이 toUpperCase : 대문자로 만들기 toLowerCase : 소문자로 만들기 charAt : 특정위치의 글자 찾기 indexOf : 특정문자열의 위치 equals : 문자열 비교 trim : 문자열 공백제거 replace : 특정문자 변경 repalceAll : 특정문자열 변경
X O A B C D E F A B C String1 + “DEF” String1 A B C A B C D E F Stirng클래스는 많이 쓰이고, 좋은 기능(메소드)를 많이 가지고 있습니다. 이렇게 좋은 클래스가 치명적인 단점이 있습니다. 바로 메모리를 과소비 하는 것 입니다. String객체의 경우 처음 초기화된 데이터에 변화가 생기면 기존 것을 재활용 하기보다는 새것을 찾습니다. 무슨 얘기인지 아래 그림을 보시면 이해가 쉽습니다. A B C + D E F X A B C String1 + “DEF” Stirng클래스의 대안으로 StringBuffer, StringBuilder 등장 O String1 A B C A B C D E F String1 + “DEF”
22-4. StringBuffer와 StringBuilder의 등장 Stirng클래스의 새로운 메모리를 생성하는 문제로 인해 속도가 느려지는 현상이 있습니다. 그래서 속도적인 측면에서 더욱 개선된 StringBuffer와 StringBuilder가 등장 합니다. StringBuilder 주요 기능(메소드) Append : 문자열 추가 insert : 특정 위치에 문자열 추가 delete : 문자열 삭제 deleteCharAt : 특정 문자 하나 삭제 StringBuffer와 StringBuilder는 약간의 차이가 있을 뿐 같다고 생각하시면 됩니다. StringBuffer와 StringBuilder는 동일하다고 생각 하면 됩니다. 단, StringBuffer가 StringBuilder보다 먼저 세상에 등장 한 클래스 입니다. 기능은 같고, 단지 StringBuilder가 속도 면에서 좀더 빠릅니다.
22-5. 날짜(Calendar) API 개발 테스트에 많이 쓰이는 System.currentTimeMillis() 날짜와 시간을 표현할 때 많이 쓰이는 Calendar클래스 입니다. (22_5_ex1_calendar) 개발 테스트에 많이 쓰이는 System.currentTimeMillis() System.currentTimeMillis()는 현재의 시간을 1/1,000초 단위로 표시합니다. 거의 속도 테스트 용도로 쓰입니다.