반응형
데이터 타입 분류
참조 타입이란 객체의 번지(메모리 주소)를 참조하는 타입이다.
기본 타입과의 차이점으로 기본 타입은 값을 메모리에 저장하고 참조 타입은 객체가 저장된 메모리 주소를 저장한다.
메모리 영역
- 메소드 영역 : 클래스(.class)를 읽어들여 저장한다.
- 런타임 상수풀, 필드 데이터, 메서드 데이터, 메서드 코드, 생성자 코드 등을 저장한다.
- 메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.
- 힙 영역 : 객체와 배열이 생성되는 영역이다.
- JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.
- 참조하는 변수나 필드가 없으면 JVM이 가비지 컬렉터를 실행시킨다.
- 자바는 코드로 직접 제거시키는 방법을 제공하지 않지만 null처리로 대신한다.
- JVM 스택 영역 : JVM 스택 영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.
- 추가적으로 스레드를 생성하지 않으면 main 스레드만 존재하므로 JVM 스택도 하나이다.
참조 변수의 ==, != 연산
- 참조 타입 변수의 값은 힙 영역의 객체 주소이므로 결국 주소 값을 비교하게 된다.
- 객체의 주소는 다르지만 값이 같을 수 있으니 유의해서 사용해야 한다.
- equals()를 오버라이딩해서 사용하길 권장한다.
null과 NullPointerException
- null은 참조 타입 변수는 힙 영역의 객체를 참조하지 않았다는 뜻으로 주소를 가지고 있지 않다는 의미이다.
- NullPointerException은 주소를 가지지 않은 참조 타입을 호출했다는 오류를 의미한다.
String 타입
- 문자열을 저장할 수 있는 타입으로 가장 널리 사용되는 타입이다.
- 리터럴 형태이므로 메모리 낭비가 생길 수 있으니 StringBuffer나 StringBuilder와 함께 사용하자.
배열 타입
- 각 데이터에 인덱스를 부여해 놓은 자료 구조이다.
- 같은 주제나 이름의 상자에 번호를 붙여서 순서를 정해놓은 자료 구조이다.
커멘드 라인 입력
- public static void main(String args[])의 args는 cmd 창에서 입력 받은 값을 의미한다.
- hello.java를 실행 할 때
> java hello 1
에서 1이 args로 받을 수 있는 값이 된다.
다차원 배열
- 1차원 배열이 아닌 2차원 배열 이상의 배열을 의미한다.
- 2차원 배열은 엑셀에 있는 행과 열을 떠올리면 된다.
객체를 참조하는 배열
- 배열은 객체이므로 메모리의 주소를 가지고 있다.
- 얕은 복사와 깊은 복사를 구분해야 한다.
public class test {
public static void main(String[] args) {
// 깊은 복사 하는 방법
String[] s = new String[3];
s[0] = "a";
s[1] = "b";
s[2] = "c";
String[] ss = new String[3];
System.arraycopy(s, 0, ss, 0, s.length);
ss[0] = "C";
System.out.println(s[0] + " : " + ss[0]);
String[] sss = Arrays.copyOf(s, s.length);
sss[0] = "D";
System.out.println(s[0] + " : " + sss[0]);
List<String> l = new ArrayList<>();
l.add("a");
l.add("b");
l.add("c");
// List<String> ll = new ArrayList<>();
// System.arraycopy(l, 0, ll, 0, l.size());
// ll.add("K");
// System.out.println(l.get(2) + " : " + l.get(3));
List<String> ll = new ArrayList<>(l);
ll.add("E");
System.out.println(ll.get(3));
System.out.println(l.get(3));
}
}
향상된 for문
public static void main(String[] args) {
int s[] = { 95, 71, 84, 93, 87 };
int sum = 0;
for (int score : s) { // 증감을 자동으로 해줌
sum += score;
}
System.out.println(sum);
}
열거 타입
- 상수를 대신 하는 방법으로 사용한다.
- 작성 된 순서대로 0, 1, 2 .. 로 번호가 붙는다.
public enum Week {
MONDAY, TUESDAY, WENESDAY // MONDAY는 0, TUESDAY는 1
}
- 열거 객체의 메소드
리턴 타입 | 메소드(매개 변수) | 설명 |
String | name() | 열거 객체의 문자열을 리턴 |
int | ordinal() | 열거 객체의 순번(0번 부터 시작)을 리턴 |
int | compareTo() | 열거 객체를 비교해서 순번 차이를 리턴 |
열거 타입 | valueOf(String name) | 주어진 문자열의 열거 객체를 리턴 |
열거 배열 | values() | 모든 열거 객체들을 배열로 리턴 |
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
[java-기초-07] 상속 (0) | 2021.01.05 |
---|---|
[java-기초-06] 클래스 (0) | 2021.01.04 |
[java-기초-04] 조건문과 반복문 (2) | 2021.01.02 |
[java-기초-03] 연산자 (0) | 2021.01.01 |
[java-기초-02] 변수와 타입 (0) | 2020.12.31 |