- 데이터를 일시적으로 저장하거나 처리하기 위한 메모리 공간
- CPU가 일을 효율적으로 처리하기 위해서 필요
JAVA
에서는 주로 입출력 스트림과 관련하여 사용
console
에서 Scanner
클래스를 사용하여 데이터를 입력받을 때enter
, tab
, 공백 → 데이터를 구분하는 문자로 취급한다.enter
를 제외한 나머지를 읽는다.System.out.print("전화번호 >> ");
String tel = scan.next();
scan.nextLine(); // next()가 남긴 개행 문자 소비 (입력 버퍼 비우기)
System.out.print("주소 >> ");
String addr = scan.nextLine();
- Map보다 축소된 기능의 객체로, 데이터를 파일로 입출력할 수 있는 기능이 있다.
Map | Properties | |
---|---|---|
key, value | 모든 타입의 객체를 담을 수 있다. | String 타입의 객체만을 담을 수 있다. |
데이터 입출력 메소드 | put(), get() | setProperty(), getProperty() |
- 메소드를 호출할 때마다 인수의 개수를 다르게 설정하고 싶을 때 사용하며,
이때 넘겨진 인수들은 메소드 내부에서 배열로 처리된다.- 가변형 인수와 일반 인수를 같이 사용할 경우 가변형 인수를 제일 뒤쪽으로 배치해야 한다.
- 한가지의 자료형만 사용 가능하다.
public int sumArgs(int ... data) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return sum;
}
// main
System.out.println(test.sumArgs(1, 2, 3, 4, 5));
제네릭 타입 글자
👇 아래의 네가지 종류를 가장 많이 사용한다.
- T: Type
- K: Key
- V: Value
- E: Element
class 클래스명<제네릭타입글자> {
// 변수 선언에 제네릭 사용할 경우
private 제네릭타입글자 변수명;
.
.
// 메소드의 반환값에 제네릭 사용할 경우
접근제한자 제네릭타입글자 메소드명() {
.
.
return 값;
}
// 메소드의 매개변수에 제네릭을 사용할 경우
접근제한자 반환값타입 메소드명(제네릭타입글자 변수명, ...) {
.
.
}
}
// 제네릭 사용
class MyGeneric<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
// 제네릭 미사용
class NonGenericTest {
private Object value;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
public class GenericTest {
public static void main(String[] args) {
NonGenericTest ng1 = new NonGenericTest();
ng1.setValue("가나다라");
NonGenericTest ng2 = new NonGenericTest();
ng2.setValue(100);
String strTemp = (String)ng1.getValue();
System.out.println("문자열 반환값: " + strTemp);
int iTemp = (int)ng2.getValue();
System.out.println("정수형 반환값: " + iTemp);
System.out.println("-----------------------");
MyGeneric<String> mg1 = new MyGeneric<>();
mg1.setValue("우리나라");
// mg1.setValue(100); // 제네릭으로 지정한 자료형과 다른 자료형은 오류
MyGeneric<Integer> mg2 = new MyGeneric<>();
mg2.setValue(500);
// mg2.setValue("안녕"); // 오류
strTemp = mg1.getValue();
iTemp = mg2.getValue();
System.out.println("제네릭 문자열 반환값: " + strTemp);
System.out.println("제네릭 정수형 반환값: " + iTemp);
System.out.println("-----------------------");
NonGenericTest ng3 = new NonGenericTest();
ng3.setValue("ABCD");
}
}
- 서로 관련 있는 상수들의 집합
- 클래스처럼 보이게 하는 상수
name()
: 열거형 상수의 이름을 문자열로 반환ordinal()
: 열거형 상수가 정의된 순서값(index) 반환valueOf(”열거형상수명”)
: 지정된 열거형에서 ‘열거형상수명’과 일치하는 열거형 상수를 반환열거형이름.상수명
→ valueOf()
메소드와 동일열거형이름.values()
: 모든 상수들을 배열로 가져옴enum 열거형이름 { 상수명1, 상수명2, .. }
public enum Color { RED, GREEN, BLUE }
public enum Count { ONE, TWO, THREE }
// 열거형을 switch문으로 비교하기
Count mycnt = Count.ONE; // or Count.valueOf("ONE")
switch(mycnt) {
case ONE: System.out.println("ONE값"); break;
case TWO: System.out.println("TWO값"); break;
case THREE: System.out.println("THREE값"); break;
}
enum 열거형이름 { 상수명1(값들), 상수명2(값들), .. }
// 계절을 나타내는 상수 작성 (기간, 평균온도)
public enum Season {
봄("3월부터 5월까지", 13),
여름("6월부터 8월까지", 28),
가을("9월부터 11월까지", 15),
겨울("12월부터 2월까지", 1);
// 값들이 저장될 변수
private String span;
private int temp;
// 생성자
Season(String span, int temp) { // private 생략해도 자동으로 됨
this.span = span;
this.temp = temp;
}
// getter 메소드 작성
public String getSpan() {
return span;
}
public int getTemp() {
return temp;
}
}