반응형

*스트링 버퍼 (StringBuffer)

- 스트링 버퍼는 문자열을 추가하거나 변경 할 때 사용하는 자료형을 의미한다. 스트링 버퍼가 가지고 있는 메소드 들은 대부분 자기 자신(this)을 반환한다.

- 스트링 체이닝 이란 자기 자신의 메소드를 호출하여 자기 자신의 값을 바꿔나가는 것을 의미한다.

StringBuffer sb = new StringBuffer();
sb.append("hello");      // 해당 스트링 버퍼에 "hello", 공백, "world"를 차례대로 추가
sb.append(" ");
sb.append("world");

String str = sb.toString();  // StringBuffer을 toString()메소드를 이용하여 반환


// 위 코드를 스트링 버퍼를 이용하여 수정 진행
String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();
반응형
반응형

*래퍼 클래스 (wrapper class)

- 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 존재한다.

- 메소드의 인수로 객체 타입만 요구되는 경우 기본 타입의 데이터를 그대로 사용하는데 무리가 있는데, 이때 먼저 기본 타입의 데이터를 객체로 변환 후 작업을 수행 해야 한다.

- 래퍼 클래스는 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스로 java.lang 패키지에 포함되어 제공된다.

- 래퍼 클래스는 각 타입에 해당하는 데이터를 인수로 전달받아 해당 값을 가지는 객체로 만들어 준다.

기본 타입 래퍼 클래스
byte Byte 
short  Short 
int  Integer 
long  Long 
float  Float 
double  Double 
char  Character 
boolean  Boolean

 

*오토 박싱 / 오토 언박싱

- 오토 박싱이란 컴파일러에 의해 기본 타입이 자동으로 래퍼 클래스로 변환되는 것을 의미한다.

public class WrapperExam {
    public static void main(String[] args) {
        int i = 5; 
        Integer i2 = new Integer(5);
        Integer i3 = 5;                      //오토박싱
        int i4 = i2;                         //오토언박싱
        long i2_long = i2.longValue();
        long i4_long = i4.longValue();       // 오류 발생!
    }
}

integer타입과 int타입의 오토박싱, 오토언박싱의 경우에도 Wrapper클래스가 사용된다.
i2는 Integer형이므로 longValue()메소드를 사용할 수 있으나
i4는 int형이므로 메소드를 사용하면 오류가 발생한다.
반응형
반응형

*인터페이스

- ex) 홍길동의 역할이 변호사, 의사, 식당손님 등 다양한 역할을 가진다고 할때. (다형성)

- 자바에선 다중상속 불가능. 인터페이스(interface) 활용.

- implements 를 통해 진행

- interface는 100% 추상매서드만 추가 가능

class Main {
	public static void main(String[] args) {
		홍길동 a홍길동 = new 홍길동();
		의사 a의사 = a홍길동;
		변호사 a변호사 = a홍길동;
		식당손님 a식당손님 = a홍길동;
	}
}

class  홍길동 extends 변호사 implements 의사, 식당손님 {
	public void 진찰하다() {
	}
	public void 주문하다() {
	}
}

class 변호사 {
}

interface 의사 {
	// abstract 생략 가능
	abstract void 진찰하다(); 
}

interface 식당손님 {
	// abstract 생략 가능
	abstract void 주문하다();
}
반응형
반응형

*ArrayList

1. import

import java.util.ArrayList;

 

2. 객체 생성

// String 담는 ArrayList 생성
ArrayList<String> my_arr_list = new ArrayList<String>();

 

3. 추가 : add

my_arr_list.add("hello");
my_arr_list.add("java");
my_arr_list.add("world!");

 

4. 삭제 : remove

// 2번째 삭제
my_arr_list.remove(2);

 

5. 엘리먼트 가져오기 : get

// 1번째 원소 출력
System.out.println(my_arr_list.get(1));

 

6. ArrayList 탐색을 위한 Iterator

- 객체지향 프로그래밍에서 사용하는 반복기법이다.

// my_arr_list의 Iterator 객체 it 생성방법
Iterator<String> it = my_arr_list.iterator();

 

7. Iterator을 이용한 while문

- hasnext() : 더 순회할 엘레먼트가 있는지 알수 있다.

- Iterator명.next() : 다음 엘레먼트를 갖고 올 수 있다.

// Iterator 이용 my_arr_list의 모든 원소 출력
while( it.hasNext() ) {
	System.out.println( it.next() );
}

 

8. ArrayList 클래스의 private 맴버 변수로 Object를 담는 배열 생성

class ArrayList 
{
	private int size = 0;
    
    // object[] 타입 private 멤버변수 elementData 생성
    private Object[] elementData = new Object[5];
}

 

9. Object 타입을 인자로 받는 빈 public 메소드, addLast 생성

class ArrayList {
    private int size = 0;
    private Object[] elementData = new Object[50];

    // Object타입을 인자로 받는 빈 메소드, addLast 생성
    public boolean addLast( Object a ) {
        return true;
    }
}

 

10. Object 타입 원소 하나를 맨 마지막 위치에 추가.

class ArrayList {
    private int size = 0;
    private Object[] elementData = new Object[50];

    public boolean addLast(Object e)
    {
        // elementData의 마지막 위치에 인자 e 추가
        elementData[ size ] = e;

        size ++;
        return true;
    }
}

 

11. 중간 위치에 추가.

class ArrayList {
    private int size = 0;
    private Object[] elementData = new Object[50];

    public boolean addLast(Object e) {
        elementData[size++] = e;
        return true;
    }

    public boolean add(int index, Object element) {
        for (int i = size - 1; i >= index; i--) {
            elementData[i + 1] = elementData[i];
        }

        //elementData의 index에 데이터를 추가       
		elementData[index] = element;
        
		size++;

        return true;
    }
}

 

12. 첫번째 위치에 추가.

// 기존 add함수 이용하여 구현.

class ArrayList {
    private int size = 0;
    private Object[] elementData = new Object[50];

    public boolean addLast(Object e) {
        elementData[size++] = e;
        return true;
    }

    public boolean add(int index, Object element) {
        for (int i = size - 1; i >= index; i--) {
            elementData[i + 1] = elementData[i];
        }
        elementData[index] = element;
        size++;
        return true;
    }
   
   public boolean addFirst(Object element) {
   // add 메소드를 이용해서 데이터를 첫번째 위치에 저장하는 addFirst함수 구현
   return add( 0, element);
   
   }
}

 

13. n번째 위치 데이터 불러오기 get메서드

class ArrayList {
    private int size = 0;
    private Object[] elementData = new Object[50];

    // index에 위치한 데이터를 가져오는 get 함수
    public Object get(int index) {
        return elementData[index];
    }

    public boolean addLast(Object e)
    {
        elementData[size++] = e;
        return true;
    }

    public boolean add(int index, Object element)
    {
        for (int i = size - 1; i >= index; i--) {
            elementData[i + 1] = elementData[i];
        }
        elementData[index] = element;
        size++;
        return true;
    }
    public boolean addFirst(Object element)
    {
        return add(0, element);
    }
}
반응형

+ Recent posts