Programming/Java

12. API

주죵 2021. 1. 11. 23:24
728x90
반응형

ㅇJAVA 필수 API

API란 무엇?

java에는 개발자들이 편리하게 쓸수 있는 클래스들이 아~~~주 많다. 이러한 기본적으로 제공되는 클래스들로 개발자들은 그냥 편하게 다양한 기능을 사용할 수 있다. 이러한 기능들을 정의해둔 클래스들을 API(Application Programming Interface)라고 한다. 즉 '누군가가 만들어놓은 기능'들을 API라 할 수 있다. 

API의 종류는 너~~~무나도 많지만 여기선 많이 사용하는 API만 몇가지 알아보도록 하자.

 

String의 이해

그동안 많이 사용했던 String API를 알아보자!

String string = "Hello World!"

String은 대문자로 시작하기 때문에 기초데이터가 아닌 객체데이터이다. 하지만 뒤에 new 생성자 없이 기초데이터처럼 초기화한다. 왜그럴까??

별이유는 없다. 그냥 많이 쓰이는 객체라서 편하게 쓰라는 고슬린형님(자바 만든사람)의 배려이다 ㅋㅋ

따라서 아래 두가지 경우가 모두 가능하다

String string = "Hello World";
String string = new String("Hello World");

String의 주요 Method

- concat : 문자열 연결

Python Pandas에서 데이터프레임 연결할때 많이 쓰는 concat. java에서 String연결로 쓰인다

- substring : 문자열 자르기

- length : 문자열 길이

- toUpperCase : 대문자로 만들기

- toLowerCase : 소문자로 만들기

- charAt : 특정 위치의 글자찾기

- indexOf : 특정 문자열의 위치

charAt과 indexOf는 이렇게만 보면 뭔가 싶다. 예를 들어보면

String str1 = "abcdef"

str1.charAt(3)
str1.indexOf('c')

str1.charAt(3)을 print하면 'd'가 출력된다. (3번째에 있는게 d이기 때문)

str1.indexOf('c')를 print하면 2가 출력이 된다. (c는 2번째에 위치하기 때문)

인덱싱이 0부터 시작된다는거 혼동하지 말자.

- equals : 문자열 비교

- trim : 문자열 공백 제거. (문자열의 맨 앞과 맨 뒤의 공백 제거)

- replace : 특정문자 변경

- replaceAll : 특정문자열 변경

 

String의 문제점

String은 좋은 기능을 많이 가지고있으나 "메모리 과소비"라는 치명적 단점이 있다. 

처음 초기화된 데이터에 변화가 생기면 기존것을 재활용하지 않고 새것을 찾는 방식이기 때문이다.

위의 그림에서 볼수있는 것처럼 String ABC를 ABCDEF로 바꾸고싶다고 한다면, 기존 ABC에 DEF를 붙이는게 아니라 그냥 새로운 ABCDEF를 메모리에 활동한다.  그렇게 되면 기존의 ABC는 메모리 일부를 차지하며 그대로 남아있게 되는것이다.

 

StringBuffer 와 StringBuilder

String의 메모리 문제로 발생하는 속도문제를 개선하기 위한 API가 StringBuffer와 StringBuilder이다. StringBuffer와 StringBuilder는 거의 똑같다. Builder가 더 최근에 나온애라 속도가 쬐끔 더 빠르다.

StringBUilder stringb = new StringBuilder("abcdef");

stringb.append("hijklmn");
System.out.println(stringb);

 위의 출력값은 "abcdefghijklmn"이 된다.

다만 String은 hijklmn을 붙인 출력값을 만들기 위해 새로운 메모리를 할당했을 것이다.

그러나 위의 예제는 기존에 있던 "abcdef"가 존재하던 메모리에 "hijklmn"이 추가되어 붙었다고 생각하면 된다.

StringBuilder의 주요 메소드는 다음과 같다

- append : 문자열 추가

- insert : 특정위치에 문자열 추가

- delete : 문자열 삭제

- deleteCharAt : 특정 문자 하나 삭제

 

Calender API

날짜와 시간을 표현할 때 Calender 클래스를 많이 사용한다.

//모두가 사용하는 날짜로 장난질하면 안되기 때문에 Singleton패턴의 클래스이다
Calender calender = Calender.getInstance();
int year = calender.get(Calender.YEAR);
int month = calender.get(Calender.MONTH);
int day = calender.get(Calender.DAY_OF_MONTH);
int hour = calender.get(Calender.HOUR_OF_DAY);
int min = calender.get(Calender.MINUTE);

 

위의 예시처럼 현재시간을 표현하기 위한것 뿐 아니라 개발 테스트의 속도비교를 위해서도 많이 사용된다.

이때 많이 사용되는 기능은 System.currentTimeMillis() 이다. 현재시간을 1/1000초 단위로 표시한다.

long start = System.currentTimeMillis();
/*
*** 특정한 알고리즘 ***
*/
long end = System.currentTimeMillis();

end-start를 하면 알고리즘이 돌아가는데 걸린 시간 출력이 가능하다.

 

 

 

Random 클래스

랜덤은 ㄹㅇ 개많이쓰긴한다. 데이터분석이든 개발이든 모두 많이 쓰이는 녀석.

Math.random() 을 쓰기도 하지만, 요즘은 Random클래스를 더 많이 사용한다. (Math.random은 오래된녀석)

 

/*
Math의 raondom 메소드는 double타입의 임의의 수 발생시킨다
가이드를 보면 static이고 반환타입이 double임을 확인할 수 있다.
*/
double d = Math.random();
System.out.println(d)

//Random 클래스는 객체 생성을 해야한다.
Random rand = new Random();
//100까지의 정수형 int 난수 생성
random.nextInt(100);

 

Scanner 및 Sysout

Scanner 

무언가를 얻어올때 사용하는 Scanner이다.

 

Scanner scanner = new Scanner (System.in);

//정수형 받을때
int i = scanner.nextInt();
//문자열 받을떄
String str = scanner.next();
//문자열 출력하지만 첫 \n 까지의 값만을 출력.
String str1 = scanner.nextLine()

 

System.out.println/print (sysout)

실제 개발 산출물에는 나타나지 않고, 콘솔창에만 표시된다. 따라서 테스트용으로 많이 사용된다. 이건 뭐 워낙 많이 사용되고 HelloWorld를 찍어본 사람이라면 다 알고있을것이다.

하나 알아둘것은 println은 \n이 포함되는것! print는 그렇지 않은것.

 

Wrapper 클래스

기초데이터를 객체데이터로 변환한다. 예시를 하나 살펴보자

//integer는 Object. 객체데이터이다.
Integer integer = new Integer(10);
//여기서 i는 기초데이터이다
int i = integer.intValue();

 

이것이 왜 필요할까??

리가 어떤 method를 사용하려고 한다.

method(param1, param2) 처럼 2개의 파라미터가 들어가야 하는 경우인데 param1이 Integer 객체를 받는다고 한다면 객체데이터를 넣어줘야 한다. 

이렇게 기초데이터를 객체데이터로 바꿔주는 경우는 다양한데, 기초데이터 변수선언 앞글자를 대문자처리 하는 경우가 대부분이다.

ex) double -> Double, float -> Float

 

Timer 클래스

시간간격, 시간 조절 관련된 기능을 위해 많이 사용되는 클래스이다

Timer, TimerTask

Timer객체는 일정 시간이 되면, TimerTask객체가 작동시킨다. 단, TimerTask클래스는 추상클래스이다. 따라서 TimerTask 클래스는 상속받는 클래스를 만들어서 사용해야 한다.

import java.util.Timer;
import java.util.TimerTask;
import java.util.TimerTask;

public class TimeEx {
	public TimerEx() throws interruptedException{
    	Timer timer = new Timer(true); //Task 끝나고 jvm이 자동 종료시키도록 하기 위한 True
        TimerTask t1 = new ExTimerTask1();
        TimerTask t2 = new ExTimerTask2();
        
        timer.schedule(t1,2000) //2초후 실행. 단위가 million seconds
        timer.schedule(t2,10000) //10초후 실행
        
        Thread.sleep(11000); //10초 대기하는 task다 기다리고 다음 구현하도록 하기 위해
        System.out.println("*******"); //Thread.sleep없으면 기다리지 않고 * 출력된다
 	}

}

public class ExTimerTask1 extends TimerTask{
	@Overide
    public void run() {
    	System.out.println("EXTimerTask1 run");	
    }
}

public class ExTimerTask2 extends TimerTask{
	@Overide
    public void run() {
    	System.out.println("EXTimerTask2 run");	
    }
}

ExTimerTask1과 ExTimerTask2 클래스는 TimerTask클래스(추상클래스)를 상속받았으므로 추상메소드(run)를 꼭 오버라이드 해야한다. Timer 클래스의 객체인 timer는 일정 시간 후에 TimerTask 객체 t1, t2를 시킨다.

 

StringTokenizer 클래스

문자열을 분할할 때 사용하는 대표적인 클래스이다.

public static void main(String[] args){
	String str1 = "오늘 날씨는 춥고, 눈이 많이 오고 있습니다."
    String str2 = "2014/12/25"
    
    StringTokenizer token1 = new StringTokenizer(str1); //아무것도 없을땐 띄어쓰기로 구분
    StringTokenizer token2 = new StringTokenizer(str2,"/"); // /로 구분
    
    System.out.println(token1.countTokens()); //7출력
    System.out.println(token2.countTokens()); //3출력
    
    
    }

 

 

그외에도 많은 API를 적절하게 활용하도록 하자~

 

출처 : 신입SW인력을 위한 실전 자바 (by 블스)

728x90

'Programming > Java' 카테고리의 다른 글

14. JAVA Collections  (0) 2021.01.15
13. 예외처리  (0) 2021.01.13
11. 패턴을 통한 객체지향 언어의 이해  (0) 2021.01.10
10. 인터페이스  (0) 2021.01.07
9. 추상클래스  (0) 2021.01.07