반응형
# 문자열
## 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();
}
}
}
}
반응형
'인프런 강의 학습 > Java TPC' 카테고리의 다른 글
Java TPC_21일차 ArrayList / Wrapper 클래스 (0) | 2022.01.28 |
---|---|
Java TPC_19일차 패키지 / 자바에서 제공하는 API 접근 및 활용 (0) | 2022.01.25 |
Java TPC_18일차 객체지향 프로그래밍의 3대 특징 / 다형성 / 추싱클래스와 인터페이스 (0) | 2022.01.24 |
Java TPC_17일차 Object 클래스 / Object 클래스 활용 (0) | 2022.01.24 |
Java TPC_16일차 추상 클래스 / 인터페이스 / 인터페이스(규약)와 JDBC의 관계 / 인터페이스의 상속관계 (0) | 2022.01.23 |