참조 타입
출처 : 혼자 공부하는 자바
참조 타입에는 객체, 배열, 클래스 등이 존재한다.
기본 타입 변수와 참조 타입 변수의 차이점은
메모리 사용 영역에 있다.
출처 : 혼자 공부하는 자바
참조 타입 변수의 경우 기본적으로 힙 영역에 주소를 가지며 참조하는 형태로 저장된다.
출처 : 혼자 공부하는 자바
메소드 영역은 클래스 별로 정적 필드, 상수, 생성자 등을 분류해 저장한다.
힙 영역은 객체와 배열이 생성되는 영역이다.
JVM 스택 영역은 메소드가 호출되면 프레임이 추가되고, 종료되면 프레임이 제거된다.
출처 : 혼자 공부하는 자바
JVM 스택 영역의 사진이다. 메소드를 호출할 때 스택 영역에 변화를 알 수 있다.
참조 타입 변수의 경우 스택 영역에 힙 영역에 생성된 객체의 주소를 가진다.
참조 타입 변수의 비교는 번지 값의 비교를 의미한다.
즉 같은 객체를 참조하면 true, 그렇지 않으면 false를 반환한다.
참조 타입 변수가 null값을 가진다면 객체를 참조하지 않는다는 뜻이다.
추가적으로 참조 타입 변수가 null인데 데이터나 메소드를 사용할 경우
NullPointerException이라는 오류가 발생하게 된다.
출처 : 혼자 공부하는 자바
String 타입을 보면 다른 문자열을 가지는 경우 다른 주소를 참조하지만,
같은 문자열을 가지는 경우 동일한 주소를 참조한다.
만약 이를 새로운 힙 영역에 생성하기 위해서는 new String("신용권")와 같이 저장하면 된다.
참조 타입은 "=="이 번지를 비교하기에 문자열을 비교하기 위해서는 equals()를 사용한다.
배열
데이터를 연속된 공간에 나열하고 각 데이터에 인덱스를 부여한 자료구조이다.
같은 타입의 데이터만 저장할 수 있으며, 길이를 늘리거나 줄일 수 없다.
출처 : 혼자 공부하는 자바
기본적으로 위와 같이 배열을 생성할 수 있다.
선언 후 다른 실행문에서 값 목록으로 배열 생성하는 것은 불가능하다.
이를 위해서는 아래와 같이 선언해야 한다.ㅍ
출처 : 혼자 공부하는 자바
기본적으로 배열의 길이는 배열.length를 사용해 길이를 확인할 수 있다.
추가적으로 다차원 배열도 구현할 수 있다.
참조 타입 배열의 경우 각자 객체의 번지를 가지고 있다.
배열의 복사는 System.arraycopy()를 이용해 복사한다.
출처 : 혼자 공부하는 자바
배열을 이용해서 for문을 진행하면 루프 카운터 변수나 증감식을
사용하지 않고 구현할 수 있다.
열거 타입
출처 : 혼자 공부하는 자바
열거타입은 우선 소스파일로 생성하고 이후에 위와 같은 형식으로 선언해준다.
열거 상수는 열거 객체로 생성되어 힙 영역에 저장된다.
출처 : 혼자 공부하는 자바
활용 문제
Calendar를 사용해서 일요일이면 "일요일에는 축구를 합니다."를 출력하고,
그렇지 않으면 "열심히 자바 공부를 합니다"를 출력한다.
이는 Week.java 파일에 열거 타입을 사용하여 열거상수로 월요일~일요일을 저장한다.
정답 코드 :
Week.java
package myprac;
public class Week {
public enum Week{
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
}
EunmWeekExample.java
package myprac;
import java.util.Calendar;
import sec03.exam01.Week;
public class EnumWeekExample {
public static void main(String[] args) {
Week today=null;
Calendar cal = Calendar.getInstance();
int week= cal.get(Calendar.DAY_OF_WEEK);
switch(week) {
case 1:
today=Week.SUNDAY; break;
case 2:
today=Week.MONDAY; break;
case 3:
today=Week.TUESDAY; break;
case 4:
today=Week.WEDNESDAY; break;
case 5:
today=Week.THURSDAY; break;
case 6:
today=Week.FRIDAY; break;
case 7:
today=Week.SATURDAY; break;
}
if(today==Week.SUNDAY) {
System.out.println("일요일에는 축구를 합니다.");
}
else {
System.out.println("열심히 자바 공부합니다.");
}
}
}
'대학교' 카테고리의 다른 글
마이크로프로세서 - (5) 데이터 입력 (2) | 2023.10.07 |
---|---|
파이썬 - (3) 객체와 메서드 (1) | 2023.10.07 |
자바 -(4) 조건문과 반복문 (2) | 2023.10.06 |
데이터 구조 - (4) 연결 리스트 (2) | 2023.10.06 |
데이터 구조 - (3) 파이썬 기초 (2) | 2023.10.06 |