티스토리 뷰

IT/JAVA

7. Java 유용한 API

a-toz 2017. 11. 9. 18:55

**StringBuilder

=>변경할 수 있는 문자열 저장에 사용

=>변경하지 않는 문자열을 저장하게 되면 메모리 낭비가 됩니다.

=>문자열을 편집하는 작업을 연속해서 수행할 때 이 클래스의 객체를 이용합니다.

1.생성자

StringBuilder()

StringBuilder(String str)


2.메소드

void append(String str): 저장된 문자열에 str의 내용을 추가

                         리턴하는 것이 아니고 현재 문자열에 추가


String toString(): 저장된 문자열을 String으로 리턴해주는 메소드


=>웹이나 파일의 내용을 읽을 때 부분적으로 읽어서 StringBuilder에 보관한 뒤 전부 읽고 나면 다시 String에 저장해서 사용합니다.

 

**fast enumeration - for each

=>컬렉션의 모든 요소를 순서대로 접근하도록 해주는 것

=>컬렉션(배열, List, Set)


for(임시변수 : 컬렉션이름){


}

컬렉션의 모든 요소가 임시변수에 순서대로 대입됩니다.


String [] ar = {"Morning", "Afternoon", "Evening"};

//ar 배열의 모든 요소를 순서대로 접근해서 출력


int size = ar.length;

for(int i=0; i<size; i++){

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

}


//빠른 열거 이용

for(String temp : ar){

System.out.println(temp);

}


**Generics : 일반화 프로그래밍

=>클래스 내부 데이터의 자료형을 컴파일 할 때 결정하지 않고 객체를 생성할 때 결정지어서 사용하는 것

=>클래스를 만들 때는 <미지정자료형>으로 자료형을 만들어두고 사용한 후 객체를 만들때 실제 자료형을 결정해서 메소드나 인스턴스 변수의 자료형을 결정하는 것

1. 사용 이유

=>알고리즘이 동일한 메소드를 자료형 문제 때문에 여러 번 구현하는 것을 없애기 위해서

=>컬렉션을 만들 때 자료형에 제한을 두어서 동일한 자료형만으로 컬렉션을 만들기 위해서


2.클래스에 제너릭이 적용되어 있으면 객체를 만들 때 자료형을 지정해주는 것이 바람직한데 만일 지정하지 않으면 Object로 치환됩니다.


ex)제너릭이 적용된 클래스 사용

package str;


//미지정 자료형을 사용하는 클래스

public class Disp <E> {

//배열의 내용을 모두 출력하는 메소드

public void display(E [] ar){

for(E imsi : ar){

System.out.print(imsi + "\t");

}

System.out.println();

}

}


package str;


import java.util.ArrayList;


public class Main {


public static void main(String[] args) {

//제너릭이 적용된 클래스의 객체를 자료형을 지정하지 않고 생성

ArrayList al = new ArrayList();

//String을 삽입했지만 Object로 대입

al.add("Hello");

//데이터를 꺼내면 역시 Object

Object imsi = al.get(0);

//대입될 때의 자료형으로 변환해서 사용

System.out.println(((String)imsi).toUpperCase());

//처음부터 자료형을 결정하고 생성

ArrayList<String> al1 = new ArrayList<String>();

//지정한 자료형을 삽입

al1.add("Hello");

//꺼내도 지정한 자료형으로 나오므로 바로 사용 가능

System.out.println(al1.get(0).toUpperCase());

Disp<String> ob1 = new Disp<String>();

String [] sr = {"java", "javascript", "python", "r"};

ob1.display(sr);

//java 1.7이상 버전에서는 객체를 만들 때는 자료형 생략 가능

Disp<Integer> ob2 = new Disp<>();

Integer [] ir = {1,1,2,3,5,8,13,21};

ob2.display(ir);


}


}


3.제너릭의 자료형으로 기본형은 사용할 수 없습니다.

제너릭의 자료형은 참조형 만 가능하므로 기본형을 사용하고자 하는 경우에는 아래처럼 wrapper 클래스로 기재하셔야 합니다.

int -> Integer, double -> Double


이제부터 제공되는 클래스를 확인할 때 제너릭 사용여부도 같이 확인


**java.util 패키지

=>자료구조 클래스, 날짜, Random 클래스를 소유한 패키지

=>자바 프로그래밍 전 영역에서 많이 사용

=>자주 사용하기 때문에 상단에 java.util.* 로 import 해놓고 사용하는 경우가 많습니다.

=>java.lang 패키지의 클래스는 더 자주 사용되기 때문에 기본적으로 import java.lang.* 이 되어 있는 상태입니다.


1.java.util.Arrays 클래스

=>배열을 조작하기 위한 클래스

=>모든 메소드가 static 메소드이므로 객체를 생성할 필요가 없는 클래스


static String toString(배열이름): 배열 요소의 toString을 호출해서 하나의 문자열로 만든 후 리턴 - 배열의 모든 요소를 확인하고자 할 때 사용하면 편리합니다.


static List asList(배열이름): 배열을 List로 변경해서 리턴


static boolean equals(배열1, 배열2): 배열1과 배열2의 모든 요소가 같은지를 리턴


static void sort(배열): 배열의 모든 요소를 오름차순 정렬

단 배열의 요소가 Comparable 인터페이스를 implements 해야 합니다.


static void sort(배열, Comparator <?>): 배열의 모든 요소를 Comparator로 비교해서 오름차순 정렬합니다.


static int binarySearch(배열, 요소): 배열에서 요소가 있으면 그 위치를 리턴하고 없으면 음수를 리턴하는데 배열의 데이터가 정렬되어 있을 때만 정확한 위치를 리턴합니다.


1)sorting(정렬)

=>데이터를 크기 순으로 나열하는 것

=>ascending(오름차순): 작은 것에서 큰 것 순으로 나열

=>descending(내림차순): 큰 것에서 작은 것 순으로 나열

=>데이터를 정렬하기 위해서는 크기 비교가 가능해야 합니다.

=>숫자 데이터는 크기 비교가 가능하기 때문에 정렬이 가능합니다.

package utiltest;


//java.util 패키지에 있는 모든 클래스들은 이름만으로 사용가능

import java.util.*;


public class ArraysMain1 {


public static void main(String[] args) {

int [] ar = {30, 50, 70, 20, 10};

//ar의 내부 데이터 확인

//배열은 toString()이 재정의 되어 있지 않아서 

//클래스 이름과 주소가 나오게 됩니다.

System.out.println(ar);

//Arrays의 toString을 호출

System.out.println(Arrays.toString(ar));

//ar 배열의 데이터 정렬

Arrays.sort(ar);

System.out.println("=====정렬 후=====");

System.out.println(Arrays.toString(ar));

}


}


=>참조형은 기본적으로 크기 비교가 안됩니다.

=>참조형 데이터는 기본적으로 정렬이 불가능하지만 Comparable 인터페이스를 implements 하면 그 인터페이스의 compareTo 라는 메소드를 이용해서 크기 비교를 할 수 있습니다.

=>참조형 중에 Comparable 인터페이스를 implements 한 클래스는 정렬이 가능합니다.


String 배열은 정렬이 가능 : String 은 Comparable 인터페이스를 implements 했기 때문에


System.out.println("=================");

String [] sr = {"자바", "자바스크립트", "파이썬", "알", "씨"};

System.out.println(Arrays.toString(sr));

Arrays.sort(sr);

System.out.println("=====정렬 후=====");

System.out.println(Arrays.toString(sr));



=>Comparable 인터페이스를 implements 하지 않은 클래스의 객체 배열을 sort 하고자 할 때는 Comparator<배열의 요소에 해당하는 클래스이름>를 상속받는 객체를 만들어서 compare 메소드를 재정의 합니다.

그 이 재정의한 클래스의 객체를 sort 메소드의 2번째 매개변수로 대입하면 됩니다.

'IT > JAVA' 카테고리의 다른 글

9. Java Map,Set  (0) 2017.11.09
8. Java 유용한 API  (0) 2017.11.09
6. Java 주요 클래스  (0) 2017.11.09
5. Java 상속과 다형성  (0) 2017.11.09
4. Java 클래스 기본 개념  (0) 2017.11.09
댓글