[JAVA] 참조타입

dev_swanim·2023년 3월 23일

JAVA 문법

목록 보기
1/10
post-thumbnail

1. 데이터 타입 분류

  • 기본 타입
    • 정수 타입
      • byte
      • char
      • short
      • int
      • long
    • 실수 타입
      • float
      • double
    • 논리 타입
      • boolean
  • 참조 타입
    • 배열 타입
    • 열거 타입
    • 클래스
    • 인터페이스

➕ 객체 : 데이터 + 메소드

기본 타입 vs 참조 타입

기본 타입과 참조 타입의 차이는 저장되는 값이다.

기본 타입으로 선언되는 변수는 값 자체를 저장, 참조 타입으로 선언된 변수는 객체가 생성된 메모리 번지를 저장한다.

2. 메모리 사용 영역

메소드 영역 : 바이트 코드로 파일이 저장되는 영역

힙 영역 : 객체가 생성되는 영역

스택 영역 : 메소드를 호출할 때마다 생성되는 프레임이 저장되는 영역

3. 문자열(string) 타입

자바의 문자열은 string 객체로 생성

String name = "abc";
String hobby = "Swimming";

→ 각 abc, Swimming 문자열은 객체로 생성되고 객체의 번지수가 변수에 대입된다. 각 변수는 힙 영역에서 생성된 string 객체를 참조하는 것이다. 변수는 스택 영역에 저장된다.

String name = "abc";
String name2 = "abc";

둘 다 동일한 객체를 참조한다.

String name = new String("abc");
String name2 = new String("abc");

new 연산자로 직접 String 객체를 생성하고 대입할 수도 있다.

이렇게 사용하면 문자열은 같을지라도 서로 다른 번지를 가리키게 된다.

4. 배열(Array) 타입

배열 변수 선언

int[] intArray;
double[] doubleArray;
String[] strArray;

String[] scores = { 10, 20, 30 }; 

//int 항목을 0으로 초기화
int[] scores = new int[30];

//String 항목을 null로 초기화
String[] names = new String[30];

배열 변수를 선언한 시점과 값이 할당되는 시점이 다르다면…

String[] season = null;
season = new String[]("Spring", "Summer", "Fall", "Winter"};

다차원 배열

//다차원 배열 생성
int[][] scores = {
	{100, 50, 30},
	{68, 22}
}

//int 배열 생성, 2차원 배열의 길이 3인 항목을 0으로 초기화
int[][] scores = new int[2][3];

//배열의 길이를 다르게 줄 수도 있다
int[][] scores = new int[2][];
scores[0] = new int[3];
scores[1] = new int[2];

객체를 참조하는 배열

String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "C++";
strArray[2] = "C#";

5. main() 메소드의 String[] 매개변수

→ 메인 함수는 프로그램 실행 시에 처음으로 수행되는 함수이므로, 외부로부터 값을 입력받을 수 있어야 한다.

public class arg{
	public static void main(String[] args){
		System.out.println(args[0]);
	}
}

6. 열거(Enum) 타입

enum 타입 : 한정된 값을 갖는 타입

public enum season{
	Spring,
	Summer,
	Fall,
	Winter
}
public class Season{
	public static void main(String[] args){
		season today = season.Spring;
	}
}

📚참고 문헌

이것이 자바다(신용권, 임경균 지음)

profile
데이터와 백엔드를 공부하고 있습니다😌

0개의 댓글