1. 데이터 타입 분류
참조 타입 (Reference Type)
- 객체(Object)의 번지를 참조하는 타입
- 배열, 열거, 클래스, 인터페이스
- 기본 타입 vs 참조 타입
- 차이 : 저장되는 값이 무엇인가
- 기본 타입 : 실제 값을 변수 안에 저장
- 참조 타입 : 메모리의 번지를 값으로 저장
- 번지(주소값)를 통해 참조.
2. 메모리 사용 영역
메소드(Method) 영역
- 코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스 별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메소드(method) 데이터, 메소드 코드, 생성자(constructor) 코드 등을 분류해서 저장한다.
- JVM이 시작할 때 생성
- 모든 스레드가 공유하는 영역
힙(Heap) 영역
- 객체와 배열이 생성되는 영역
- 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 됨 → 쓰레기 값
- 가비지 컬렉터(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거
- 개발자는 별도의 코드를 작성할 필요가 없음 (Java는 객체를 직접 제거하는 방법 자체를 제공하지 않고 있음).
JVM 스택(Stack) 영역
- JVM 스택 영역은 각 스레드마다 하나씩 존재.
- 스레드가 시작될 때 할당된다.
- 메소드를 호출할 때마다 프레임(Frame)을 추가(Push)하고 메소드가 종료되면 해당 프레임을 제거(Pop)하는 동작을 수행.
- 프레임 내부에는 로컬 변수 스택이 존재
- 기본 타입 변수와 참조 타입 변수가 추가되거나 제거된다.
- 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
3. 참조 변수의 ==, !=연산
- 기본 타입 변수에서의 연산과 다름
- 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼 때 사용된다.
- 참조 타입의 변수의 값 = 힙 영역의 객체 주소
- 동일한 주소 값을 가지고 있다면 동일한 객체를 참조한다는 의미
4. null과 NullPointerException
null
- 힙 영역의 객체를 참조하지 않는다는 뜻
- 참조 타입 변수는 null값을 가질 수 있으며 초기값으로 사용할 수 있다.
- null로 초기화된 참조 변수는 스택 영역에 생성된다.
NullPointerException
- Exception : 프로그램 실행 도중에 발생하는 오류를 예외라고 부른다.
- 사용자의 잘못된 입력
- 프로그래머가 코드를 잘못 작성한 경우
- 참조 변수를 사용하며 가장 많이 발생하는 예외
- 참조 타입 변수를 잘못 사용할 시 발생
- 참조 타입 변수가 null을 가지고 있을 경우, 참조 타입 변수는 사용할 수 없다.
- 참조 타입 변수를 사용한다. = 객체를 사용한다.
- → 참조할 객체가 없으므로 사용할 수가 없음
5. String 타입
String name1 = "지희";
String name2 = "지희";
String name1 = new String("지희");
String name2 = new String("지희");
6. 배열 타입
배열이란?
- 변수는 하나의 데이터만 저장 가능.
- 저장해야 할 데이터의 수가 많아지면 많은 변수가 필요
- 같은 타입의 많은 데이터를 다루는 효율적인 방법
- 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조
- null 값으로 초기화가 가능하지만, null 값을 가진 상태에서 값을 읽거나 저장하게 되면 nullPointerException이 발생한다.
배열의 선언
String[] names = {"김지희", "백자민", "김아영", "김승희"};
// 이름을 바꾸고 싶다면
names[1] = "최규림";
String[] names;
~~names = {"김지희", "백자민", "김아영", "김승희"}; // 불가능한 코드~~
names = new String[] {"김지희", "백자민", "김아영", "김승희"}; // 가능
new 연산자로 배열 생성
int[] intArray = new int[5];
배열 길이
int length = intArray.length;
다차원 배열
1. 데이터 타입 분류
참조 타입 (Reference Type)
- 객체(Object)의 번지를 참조하는 타입
- 배열, 열거, 클래스, 인터페이스
- 기본 타입 vs 참조 타입
- 차이 : 저장되는 값이 무엇인가
- 기본 타입 : 실제 값을 변수 안에 저장
- 참조 타입 : 메모리의 번지를 값으로 저장
- 번지(주소값)를 통해 참조.
2. 메모리 사용 영역
메소드(Method) 영역
- 코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스 별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메소드(method) 데이터, 메소드 코드, 생성자(constructor) 코드 등을 분류해서 저장한다.
- JVM이 시작할 때 생성
- 모든 스레드가 공유하는 영역
힙(Heap) 영역
- 객체와 배열이 생성되는 영역
- 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 됨 → 쓰레기 값
- 가비지 컬렉터(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거
- 개발자는 별도의 코드를 작성할 필요가 없음 (Java는 객체를 직접 제거하는 방법 자체를 제공하지 않고 있음).
JVM 스택(Stack) 영역
- JVM 스택 영역은 각 스레드마다 하나씩 존재.
- 스레드가 시작될 때 할당된다.
- 메소드를 호출할 때마다 프레임(Frame)을 추가(Push)하고 메소드가 종료되면 해당 프레임을 제거(Pop)하는 동작을 수행.
- 프레임 내부에는 로컬 변수 스택이 존재
- 기본 타입 변수와 참조 타입 변수가 추가되거나 제거된다.
- 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
3. 참조 변수의 ==, !=연산
- 기본 타입 변수에서의 연산과 다름
- 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼 때 사용된다.
- 참조 타입의 변수의 값 = 힙 영역의 객체 주소
- 동일한 주소 값을 가지고 있다면 동일한 객체를 참조한다는 의미
4. null과 NullPointerException
null
- 힙 영역의 객체를 참조하지 않는다는 뜻
- 참조 타입 변수는 null값을 가질 수 있으며 초기값으로 사용할 수 있다.
- null로 초기화된 참조 변수는 스택 영역에 생성된다.
NullPointerException
- Exception : 프로그램 실행 도중에 발생하는 오류를 예외라고 부른다.
- 사용자의 잘못된 입력
- 프로그래머가 코드를 잘못 작성한 경우
- 참조 변수를 사용하며 가장 많이 발생하는 예외
- 참조 타입 변수를 잘못 사용할 시 발생
- 참조 타입 변수가 null을 가지고 있을 경우, 참조 타입 변수는 사용할 수 없다.
- 참조 타입 변수를 사용한다. = 객체를 사용한다.
- → 참조할 객체가 없으므로 사용할 수가 없음
5. String 타입
String name1 = "지희";
String name2 = "지희";
String name1 = new String("지희");
String name2 = new String("지희");
6. 배열 타입
배열이란?
- 변수는 하나의 데이터만 저장 가능.
- 저장해야 할 데이터의 수가 많아지면 많은 변수가 필요
- 같은 타입의 많은 데이터를 다루는 효율적인 방법
- 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조
- null 값으로 초기화가 가능하지만, null 값을 가진 상태에서 값을 읽거나 저장하게 되면 nullPointerException이 발생한다.
배열의 선언
String[] names = {"김지희", "백자민", "김아영", "김승희"};
// 이름을 바꾸고 싶다면
names[1] = "최규림";
String[] names;
~~names = {"김지희", "백자민", "김아영", "김승희"}; // 불가능한 코드~~
names = new String[] {"김지희", "백자민", "김아영", "김승희"}; // 가능
new 연산자로 배열 생성
int[] intArray = new int[5];
배열 길이
int length = intArray.length;
다차원 배열
1. 데이터 타입 분류
참조 타입 (Reference Type)
- 객체(Object)의 번지를 참조하는 타입
- 배열, 열거, 클래스, 인터페이스
- 기본 타입 vs 참조 타입
- 차이 : 저장되는 값이 무엇인가
- 기본 타입 : 실제 값을 변수 안에 저장
- 참조 타입 : 메모리의 번지를 값으로 저장
- 번지(주소값)를 통해 참조.
2. 메모리 사용 영역
메소드(Method) 영역
- 코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스 별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메소드(method) 데이터, 메소드 코드, 생성자(constructor) 코드 등을 분류해서 저장한다.
- JVM이 시작할 때 생성
- 모든 스레드가 공유하는 영역
힙(Heap) 영역
- 객체와 배열이 생성되는 영역
- 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 됨 → 쓰레기 값
- 가비지 컬렉터(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거
- 개발자는 별도의 코드를 작성할 필요가 없음 (Java는 객체를 직접 제거하는 방법 자체를 제공하지 않고 있음).
JVM 스택(Stack) 영역
- JVM 스택 영역은 각 스레드마다 하나씩 존재.
- 스레드가 시작될 때 할당된다.
- 메소드를 호출할 때마다 프레임(Frame)을 추가(Push)하고 메소드가 종료되면 해당 프레임을 제거(Pop)하는 동작을 수행.
- 프레임 내부에는 로컬 변수 스택이 존재
- 기본 타입 변수와 참조 타입 변수가 추가되거나 제거된다.
- 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
3. 참조 변수의 ==, !=연산
- 기본 타입 변수에서의 연산과 다름
- 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼 때 사용된다.
- 참조 타입의 변수의 값 = 힙 영역의 객체 주소
- 동일한 주소 값을 가지고 있다면 동일한 객체를 참조한다는 의미
4. null과 NullPointerException
null
- 힙 영역의 객체를 참조하지 않는다는 뜻
- 참조 타입 변수는 null값을 가질 수 있으며 초기값으로 사용할 수 있다.
- null로 초기화된 참조 변수는 스택 영역에 생성된다.
NullPointerException
- Exception : 프로그램 실행 도중에 발생하는 오류를 예외라고 부른다.
- 사용자의 잘못된 입력
- 프로그래머가 코드를 잘못 작성한 경우
- 참조 변수를 사용하며 가장 많이 발생하는 예외
- 참조 타입 변수를 잘못 사용할 시 발생
- 참조 타입 변수가 null을 가지고 있을 경우, 참조 타입 변수는 사용할 수 없다.
- 참조 타입 변수를 사용한다. = 객체를 사용한다.
- → 참조할 객체가 없으므로 사용할 수가 없음
5. String 타입
String name1 = "지희";
String name2 = "지희";
String name1 = new String("지희");
String name2 = new String("지희");
6. 배열 타입
배열이란?
- 변수는 하나의 데이터만 저장 가능.
- 저장해야 할 데이터의 수가 많아지면 많은 변수가 필요
- 같은 타입의 많은 데이터를 다루는 효율적인 방법
- 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조
- null 값으로 초기화가 가능하지만, null 값을 가진 상태에서 값을 읽거나 저장하게 되면 nullPointerException이 발생한다.
배열의 선언
String[] names = {"김지희", "백자민", "김아영", "김승희"};
// 이름을 바꾸고 싶다면
names[1] = "최규림";
String[] names;
~~names = {"김지희", "백자민", "김아영", "김승희"}; // 불가능한 코드~~
names = new String[] {"김지희", "백자민", "김아영", "김승희"}; // 가능
new 연산자로 배열 생성
int[] intArray = new int[5];
배열 길이
int length = intArray.length;
다차원 배열
1. 데이터 타입 분류
참조 타입 (Reference Type)
- 객체(Object)의 번지를 참조하는 타입
- 배열, 열거, 클래스, 인터페이스
- 기본 타입 vs 참조 타입
- 차이 : 저장되는 값이 무엇인가
- 기본 타입 : 실제 값을 변수 안에 저장
- 참조 타입 : 메모리의 번지를 값으로 저장
- 번지(주소값)를 통해 참조.
2. 메모리 사용 영역
메소드(Method) 영역
- 코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스 별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메소드(method) 데이터, 메소드 코드, 생성자(constructor) 코드 등을 분류해서 저장한다.
- JVM이 시작할 때 생성
- 모든 스레드가 공유하는 영역
힙(Heap) 영역
- 객체와 배열이 생성되는 영역
- 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 됨 → 쓰레기 값
- 가비지 컬렉터(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거
- 개발자는 별도의 코드를 작성할 필요가 없음 (Java는 객체를 직접 제거하는 방법 자체를 제공하지 않고 있음).
JVM 스택(Stack) 영역
- JVM 스택 영역은 각 스레드마다 하나씩 존재.
- 스레드가 시작될 때 할당된다.
- 메소드를 호출할 때마다 프레임(Frame)을 추가(Push)하고 메소드가 종료되면 해당 프레임을 제거(Pop)하는 동작을 수행.
- 프레임 내부에는 로컬 변수 스택이 존재
- 기본 타입 변수와 참조 타입 변수가 추가되거나 제거된다.
- 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
3. 참조 변수의 ==, !=연산
- 기본 타입 변수에서의 연산과 다름
- 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼 때 사용된다.
- 참조 타입의 변수의 값 = 힙 영역의 객체 주소
- 동일한 주소 값을 가지고 있다면 동일한 객체를 참조한다는 의미
4. null과 NullPointerException
null
- 힙 영역의 객체를 참조하지 않는다는 뜻
- 참조 타입 변수는 null값을 가질 수 있으며 초기값으로 사용할 수 있다.
- null로 초기화된 참조 변수는 스택 영역에 생성된다.
NullPointerException
- Exception : 프로그램 실행 도중에 발생하는 오류를 예외라고 부른다.
- 사용자의 잘못된 입력
- 프로그래머가 코드를 잘못 작성한 경우
- 참조 변수를 사용하며 가장 많이 발생하는 예외
- 참조 타입 변수를 잘못 사용할 시 발생
- 참조 타입 변수가 null을 가지고 있을 경우, 참조 타입 변수는 사용할 수 없다.
- 참조 타입 변수를 사용한다. = 객체를 사용한다.
- → 참조할 객체가 없으므로 사용할 수가 없음
5. String 타입
String name1 = "지희";
String name2 = "지희";
String name1 = new String("지희");
String name2 = new String("지희");
6. 배열 타입
배열이란?
- 변수는 하나의 데이터만 저장 가능.
- 저장해야 할 데이터의 수가 많아지면 많은 변수가 필요
- 같은 타입의 많은 데이터를 다루는 효율적인 방법
- 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조
- null 값으로 초기화가 가능하지만, null 값을 가진 상태에서 값을 읽거나 저장하게 되면 nullPointerException이 발생한다.
배열의 선언
String[] names = {"김지희", "백자민", "김아영", "김승희"};
// 이름을 바꾸고 싶다면
names[1] = "최규림";
String[] names;
~~names = {"김지희", "백자민", "김아영", "김승희"}; // 불가능한 코드~~
names = new String[] {"김지희", "백자민", "김아영", "김승희"}; // 가능
new 연산자로 배열 생성
int[] intArray = new int[5];
배열 길이
int length = intArray.length;