
➕ 객체 : 데이터 + 메소드
기본 타입과 참조 타입의 차이는 저장되는 값이다.
기본 타입으로 선언되는 변수는 값 자체를 저장, 참조 타입으로 선언된 변수는 객체가 생성된 메모리 번지를 저장한다.
메소드 영역 : 바이트 코드로 파일이 저장되는 영역
힙 영역 : 객체가 생성되는 영역
스택 영역 : 메소드를 호출할 때마다 생성되는 프레임이 저장되는 영역
자바의 문자열은 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 객체를 생성하고 대입할 수도 있다.
이렇게 사용하면 문자열은 같을지라도 서로 다른 번지를 가리키게 된다.

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#";
→ 메인 함수는 프로그램 실행 시에 처음으로 수행되는 함수이므로, 외부로부터 값을 입력받을 수 있어야 한다.
public class arg{
public static void main(String[] args){
System.out.println(args[0]);
}
}
enum 타입 : 한정된 값을 갖는 타입
public enum season{
Spring,
Summer,
Fall,
Winter
}
public class Season{
public static void main(String[] args){
season today = season.Spring;
}
}
이것이 자바다(신용권, 임경균 지음)