티스토리 뷰
5.1 데이터 타입 분류
- 기본 타입: 값 자체를 저장
- 참조 타입: 객체가 생성된 메모리 번지를 저장 (배열, 열거, 클래스, 인터페이스)
- Stack영역에 모든 변수들을 저장하는데 기본 타입은 값 자체가 저장되고 참조 타입은 Heap영역의 번지가 저장된다.
5.2 메모리 사용 영역
- 메소드 영역
- 클래스별로 상수, static 필드, 메소드, 생성자 코드 등
- 바이트코드 파일 내용 저장
- 힙
- 객체 생성 영역
- 메소드와 스택 영역의 상수와 변수에서 참조해 감
- 가비지 컬렉션(Garbage Collection)이 수행
- 스택
- 메소드 호출할 때 생성되는 프레임이 저장되는 영역
- 메소드 호출이 끝나면 자동 제거
- 프레임 내부에 로컬 변수 스택이 있음
5.3 참조 타입 변수의 ==, != 연산
- 변수의 값이 같은지 아닌지를 판단
- 참조 타입의 변수의 값은 객체의 번지이므로 참조 타입의 경우 값이 아니라 번지가 같은지 아닌지를 판단
String str1 = "java";
String str2 = "java";
String str3 = new String("java");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
// str1과 str2는 같은 번지를 참조하고 new 연산자를 사용해 새롭게 번지를 만든 str3은 같은 java라도 다르다고 나온다.
5.4 null과 NullPointerException
- 참조 타입은 아직 번지를 저장하고 있지 않다는 뜻으로 null값을 가질 수 있음
- null값도 초기값으로 사용할 수 있기 때문에 스택 영역에 생성
NullPointerException
: null인 상태에서 객체를 사용하려고 할 때 발생하는 예외- 더 이상 객체를 참조하고 싶지 않을 때는 null을 대입하고 이 때, 어디에서도 객체를 참조하지 않을 경우에는 Garbage collector가 객체를 자동으로 삭제
5.5 문자열(String) 타입
- 자바의 문자열은 String 객체로 생성
문자열 비교
- 문자열 리터럴이 동일하면 String객체를 공유함 (String Pool)
- new 연산자로 문자열 리터럴을 대입할 때는 새롭게 객체를 생성함
- 즉, 문자열 리터럴로 생성하냐 new 연산자를 쓰냐에 따라 비교 결과가 달라짐
equals()
: 객체의 번지와 상관 없이 문자열만을 비교할 경우 사용- 빈 문자열("")도 String 객체기 때문에
equals()
를 사용
String str1 = "java";
String str2 = "java";
String str3 = new String("java");
System.out.println(str1.equals(str3)); // true
문자 추출
charAt()
: 특정 위치의 문자를 얻고 싶을 때 사용
문자열 길이
length()
: 문자열의 개수를 알고 싶을 때 사용 (공백 포함)
문자열 대체
replace()
: 특정 문자열을 다른 문자열로 대체할 때 사용- 불변 객체: String 객체의 문자열은 변경이 불가하기 때문에 기존 문자열은 나두고 대체한 새로운 문자열을 리턴
문자열 잘라내기
substring()
: 특정 위치의 문자열을 잘라낼 때 사용
문자열 찾기
indexOf()
: 주어진 문자열이 시작되는 인덱스를 리턴- 포함되어 있지 않으면 -1 을 리턴
contains
: 단순히 포함되어 있는지만 확인
문자열 분리
split
: 구분자를 사용해 여러 개의 문자열로 구성되어 있을 경우, 구분자를 기준으로 문자열을 분리하는데 사용- 분리된 문자열은 배열로 리턴
5.6 배열(Array)
- 연속된 공간에 값을 나열시키고
- 각 값에 인덱스를 부여한 자료구조
- 인덱스는 0부터 시작
- 같은 타입의 값만 사용 가능
- 길이는 임의로 늘리거나 줄일 수 없음
- 참조 변수
- null로 초기화
배열 변수 선언
int[] intArray;'
int intArray[];
값 목록으로 배열 생성
String[] season = {"봄", "여름", "가을", "겨울"};
- 배열 선언한 후에 값 목록을 변수에 대입할 수 없음
- new 연산자를 사용해서 목록 대입 가능
int[] scores;
// scores = {1, 2, 3, 4,}; 컴파일 에러
// 값 목록 대입 가능
scores = new int[] { 1, 2, 3}
new 연산자로 배열 생성
int[] intArray = new int[5];
// 길이가 5인 배열 생성
- new 연산자로 배열을 처음 생성하면 타입별 기본값으로 초기화된다.
배열의 길이
- 배열.
length
- 배열에 저장할 수 있는 항목 수
- 읽기만 가능하고 수정 불가
5.7 다차원 배열
- 배열 항목에 또 다른 배열을 대입한 배열
값 목록으로 다차원 배열 생성
int[][] scores = {
{1, 2, 3},
{11, 22, 33, 44};
scores[0][2] // -> 96
scores.length // -> 2
scoresp[0].length // -> 3
new 연산자로 다차원 배열 생성
int[][] scores = new int[2][3];
- 2차원 배열의 길이는 모두 3이고 항목들은 0으로 초기화된다.
5.8 객체를 참조하는 배열
- 참조 타입 배열은 각 항목에 객체의 번지를 저장
5.9 배열 복사
- 배열은 한 번 생성하면 길이를 변경할 수 없다.
- System.arraycopy() 메소드 호출로 복사 가능
5.10 배열 항목 반복을 위한 for문
for (타입 변수 : 배열) {
실행문
}
5.11 main() 메소드의 String[] 매개변수 용도
5.12 열거(enum) 타입
- 한정된 값을 갖는 타입
- 참조 타입이므로 null 대입 가능
public enum Seasons {
// 관례적으로 모두 대문자로 작성 혹은 언더바(_) 사용
SPRING,
SUMMER,
AUTUMN,
WINTER
}
'도서 및 강의 > 이것이 자바다' 카테고리의 다른 글
이것이 자바다 3판 챕터 7 (0) | 2024.09.17 |
---|---|
이것이 자바다 3판 챕터 6 (0) | 2024.08.26 |
이것이 자바다 3판 챕터 4 (0) | 2024.08.25 |
이것이 자바다 3판 챕터 3 (0) | 2024.08.25 |
이것이 자바다 3판 챕터 2 (0) | 2024.08.25 |
최근에 올라온 글