반응형

# 문자열

## String 클래스

  • 자바에서 문자열은 쌍따옴표(" ")로 감싸면 된다.
  • 자바에서 문자열을 저장하는 기본 자료형(Data Type)은 없다.
  • 문자열은 여러가지 조작을 할 수 있기 때문에 별도의 클래스로 자료형(java.lang.String)을 만들어 두었다. 그래서 자바에서 문자열은 객체로 취급된다.

## 문자열 생성방법

1. new 를 이용하여 생성.

  • new로 객체를 생성하면 Heap Area에 생성 됨.
String str1 = new String("갓바의정석");

String str2 = new String("햄버거");
  • Heap Area : 객체가 생성되는 메모리 영역.
  • 위에서 str1 와 생성된 객체 String("갓바의정석"), str2 와 생성된 객체 String("햄버거") 는 서로 다른 번지를 가르킨다. 

2. 문자열 상수로 생성

String str3 = "버거킹";

String str4 = "피자나라치킨공주";
  • Literal Pool : 문자열 상수(객체)가 생성되는 메모리 영역(재활용 가능!!)
  • str3 와 "버거킹", str4 와 "피자나라치킨공주"는 서로 같은 번지를 가르킨다.

## String 클래스 (실습)

public class TPC35 {
	public static void main(String[] args) {
		// 문자열 객체 생성
		// 1. new 이용
		String str1 = new String("갓바의정석");
		String str2 = new String("갓바의정석");
		
		// new 할 경우 heap area에 새롭게 객체가 생성되어 번지가 다름.
		if(str1==str2) {
			System.out.println("같음.");
		} else {
			System.out.println("다름.");
		}
		
		// 문자열 비교를 위해서는 equals를 활용!!
		if(str1.equals(str2)) {
			System.out.println("같아용.");
		} else {
			System.out.println("달라용.");
		}
		
		// 2. 문자열 상수 이용
		String str3 = "햄버거";
		String str4 = "햄버거";
		
		// 문자열 상수를 이용할 경우 Literal Area에 생성 동일한 번지를 가리킴.
		if(str3==str4) {
			System.out.println("같음.");
		} else {
			System.out.println("다름.");
		}
		
		// 문자열은 equals로 비교!
		if(str3.equals(str4)) {
			System.out.println("같아용.");
		} else {
			System.out.println("달라용.");
		}

	}
}

 

# API 생성하기

## 배열처럼 동작하는 클래스 만들기 (IntArray) (실습)

  • 아래의 경우 배열의 기본 동작을 모두 이해해야 활용 가능.
public class TPC36 {
	public static void main(String[] args) {
		// 배열 기본 동작 이해
		// 1. 배열 생성 동작.
		int[] a = new int[3];
		
		// 2. 추가 동작.
		a[0] = 10;
		a[1] = 20;
		a[2] = 30;
		
		// 3. 얻는 동작
		int temp = a[0];
		
		// 4. 배열 크기
		int len = a.length;
		
		for (int i =0; i < a.length; i++) {
			System.out.println(a[i]);
		}
	}
}
  • 클래스(API) 생성.
package kr.inflearn;

public class IntArray {
	private int count;
	private int[] arr;
	
	public IntArray() {
		this(10);
	}
	
	public IntArray(int init) {
		arr = new int[init];
	}
	
	public void add(int data) {
		arr[count++] = data;
	}
	
	public int get(int index) {
		return arr[index];
	}
	
	public int size() {
		return count;
	}
}
import kr.inflearn.IntArray;

public class TPC36 {
	public static void main(String[] args) {
		/*
		 * 배열 기본 동작 이해.
		 * */
		// 1. 배열 생성 동작.
		int[] a = new int[3];
		
		// 2. 추가 동작.
		a[0] = 10;
		a[1] = 20;
		a[2] = 30;
		
		// 3. 얻는 동작
		int temp = a[0];
		
		// 4. 배열 크기
		int len = a.length;
		
		for (int i =0; i < a.length; i++) {
			System.out.println(a[i]);
		}
		
		/*
		 * IntArray API 사용.
		 * */
		IntArray arr = new IntArray(5);
		arr.add(10);
		arr.add(20);
		arr.add(30);
		
		for (int i = 0; i < arr.size(); i++) {
			System.out.println(arr.get(i));
		}
	}
}

 

# ArrayList 흉내내기 (Object[])

## 배열처럼 동작하는 클래스 만들기 (ObjectArray)

  • 아래와 같이 직접 ObjectArray를 만들면 고정길이 배열로만 생성가능. -> 자바에서 제공해주는 API (ArrayList)와 비교하면 10%밖에 사용 못함.
public class ObjectArray {
	private int count;
	private Object[] arr;
	
	public ObjectArray() {
		this(10);
	}
	
	public ObjectArray(int init) {
		arr = new Object[init];
	}
	
	public void add(Object data) {
		arr[count++] = data;
	}
	
	public Object get(int index) {
		return arr[index];
	}
	
	public int size() {
		return count;
	}
}
  • 자바에서 제공해주는 API (ArrayList) -> 위에서 직접 만든것에 비해 100% 기능 제공. (길이 제한 없음)
import java.util.ArrayList;

import kr.inflearn.ObjectArray;
import kr.tpc.A;
import kr.tpc.B;

public class TPC37 {
	public static void main(String[] args) {
		System.out.println("============ 직접만든 ObjectArray ===========");
		// 1. 직접 만든 ObjectArray 클래스(API)
		// 단점 : 고정길이 배열이므로, 추가 생성은 불가능..
		ObjectArray arr1 = new ObjectArray(5);
		arr1.add(new A());
		arr1.add(new B());
		arr1.add(new A());
		arr1.add(new B());
		
		for (int i = 0; i < arr1.size(); i++) {
			Object ob = arr1.get(i);
			
			if (ob instanceof A) {
				((A)ob).go();
			} else {
				((B)ob).go();
			}
		}
		
		System.out.println("============ Java ArrayList ===========");
		// 2. 자바에서 제공해주는 ArrayList 
		// 장점 : 배열 길이에 제약이 없음.
		ArrayList arr2 = new ArrayList();
		arr2.add(new A());
		arr2.add(new B());
		arr2.add(new A());
		arr2.add(new B());
		arr2.add(new A());
		arr2.add(new B());
		arr2.add(new A());
		
		for (int i = 0; i < arr2.size(); i++) {
			Object ob = arr2.get(i);
			
			if (ob instanceof A) {
				((A)ob).go();
			} else {
				((B)ob).go();
			}
		}
	}
}

 

반응형

+ Recent posts