Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

SYDev

[혼자 공부하는 자바] Chapter 5. 참조 타입 본문

Programming Lang/Java

[혼자 공부하는 자바] Chapter 5. 참조 타입

시데브 2025. 1. 18. 18:55

데이터 타입 분류

  • 자바의 데이터 타입은 primitive type(기본 타입)과 reference type(참조 타입)으로 분류된다.

  • String type은 참조 타입 변수 -> heap 영역에 저장

 

메모리 사용 영역

JVM이 OS로부터 할당받은 공간을 활용하는 방식

 

- method area

  • 바이트코드 파일을 읽은 내용이 저장되는 영역
  • 클래스별로 상수, 정적 필드, 메소드 코드, 생성자 코드 등 저장

- heap area

  • 객체가 생성되는 영역
  • 객체의 주소는 method area&stack area의 상수와 변수에서 참조 가능

- stack area

  • method를 호출할 때마다 생성되는 frame이 저장되는 영역
  • method 호출이 끝나면 frame은 자동 제거
  • frame 내부에는 local variable stack 존재 -> 기본 타입 변수와 참조 타입 변수 생성&제거

 

Garbage Collector

  • java에서는 객체를 직접 제거하는 방법을 제공 X
  • 객체의 참조를 없애서, 객체 제거 가능
String hobby = "여행";
hobby = "영화";

-> 기존 "여행"을 저장하던 객체는 garbage object가 된다.

-> java에서는 해당 객체를 garbage collector를 실행시켜 자동으로 제거

 

문자열 타입

  • java는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있다. 
  • 내부 문자열만 비교하는 경우에는 equals() method 사용
String name1 = "홍길동";
String name2 = "홍길동";
String name3 = new String("홍길동");

name1 == name2	// true
name1 == name3 	// false
  • charAt(): 특정 위치의 문자 return
  • length(): 문자의 개수 return
  • replace(): 기존의 문자열의 특정 부분을 대체한 새로운 문자열 return
  • substring(): 문자열의 특정 위치에서 문자열을 잘라낸 새로운 문자열 return
  • indexOf()
  • split(): 구분자를 기준으로 분리된 배열 return

 

배열 타입

  • 동종의 값만 보관
  • 정적인 크기를 가짐
String[] array1 = { "Spring", "Summer", "Fall", "Winter" };

String[] array2;
array2 = { value1, value2, .. };	//컴파일 에러
array2 = new String[] { value1, value2, value3, ... };

-> 메소드 호출 시에도 마찬가지

 

  • new 연산자는 해당 길이의 배열을 생성하고, 배열의 번지를 return
type[] variable = null;
variable = new type[length];
  • array.length; -> read만 가능한 필드
  • System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length): 배열 복사 method

System.arraycopy(arr1, 0, arr2, 0, arr1.length);

- 배열 항목 반복을 위한 향상된 for문

package ch5;

public class AdvancedForExample {
	public static void main(String[] args) {
		int[] scores = { 95, 71, 84, 93, 87 };
		int sum = 0;
		
		for (int score: scores) {
			sum += score;
		}
		
		System.out.println("점수 총합 = " + sum);
	}
}

 

- main() method의 String[] 매개변수 용도

  • terminal에서 프로그램을 실행할 때, 다음과 같이 매개변수가 필요할 수 있음
java Sum 10 20
  • 해당 변수들은 다음과 같은 형태로 접근 가능
String x = args[0];
String y = args[1];

 

package ch5;

public class MainStringArrayArgument {
	public static void main(String[] args) {
		if(args.length != 2) {
			System.out.println("프로그램 입력값 부족");
			System.exit(0);
		}
		
		String strNum1 = args[0];
		String strNum2 = args[1];
		
		int num1 = Integer.parseInt(strNum1);
		int num2 = Integer.parseInt(strNum2);
		
		int result = num1 + num2;
		System.out.println(num1 + " + " + num2 + " = " + result);
	}
}

 

열거(Enum) 타입

  • 열거 타입을 사용하기 위해서는, 열거 타입 이름으로 .java 소스 파일을 생성하고 한정된 값을 코드로 정의해야 함
package ch5;

public enum Week {
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
}
Week today = Week.SUNDAY;

참고자료