[Day-19] 참조타입, 클래스①
2023.01.17(화)
<수업 내용>
chap.05 참조타입
05-1. 참조 타입과 참조 변수
05-2. 배열
05-3. 열거 타입
chap.06 클래스
06-1 객체지향 프로그래밍
06-2 필드
06-3 생성자
05-1 참조 타입과 참조 변수
1) 기본 타입과 참조 타입
ㆍ 기본 타입
- 정수 타입(byte, char, short, int, long) / 실수 타입(float, double) / 논리 타입
- 실제 값을 변수 안에 저장(스택영역)
int age =25;
double prince = 100.5;
ㆍ 참조 타입
- 배열 타입 / 열거 타입 / 클래스 (*String은 클래스)/ 인터페이스
- 메모리의 번지(주소)를 변수 안에 저장(값x)
- 번지를 통해 객체를 참조
- 변수는 스택영역 객체는 힙 영역에 생성
- 참조 타입의 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있음
String name = "신용권"
String hobby = "독서"
// name과 hobby는 스택 영영에 신용권과 자바는 힙 영역에 String객체로 생성
2) 메모리 사용 영역
- 메소드 영역
: 클래스를 클래스 로더로 읽어 정적필드, 상수, 메소드 코드, 생성자 코드 분류해 저장
- 힙 영역
: 객체와 배열을 생성
만약 참조하는 변수나 필드가 없다면 자동으로 제거됨
- JVM 스택 영역
: 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거
3) String타입
- 기본적으로 자바는 문자열 리터럴이 동일하다면 동일한 String 객체를 참조함
- new(객체 생성 연산자)를 통해 힙 영역에 새로운 객체를 만들 수 있음
- == 변수에 저장된 객체의 번지가 동일한지 검사
- equals 내부 문자열이 동일한지 검사
String str1 = "신용권"
String str2 = "신용권"
String str3 = new String("신용권")
boolean result1 = str1 == str2; //true
boolean result2 = str1.equals(str2); //true
boolean result3 = str1 == str3; //false 다른 객체 참조
boolean result4 = str1.equals(str3); //true
05-2 배열
1) 배열 [ ]
: 같은 타입의 데이터를 연속된 공간에 나열하고 각 데이터에 인덱스를 부여해 놓은 자료구조
- [ ] 대괄호에 기입
- 같은 타입의 데이터만 저장가능
- 한 번 생성된 배열 길이를 늘리거나 줄일 수 없음
- 인덱스 넘버는 0부터 시작
2) 배열 선언
- 배열 사용하기 위해서는 배열 변수를 선언해야 함
- 참조 변수에 속함. 힙영역에 생성
- 참조할 배열 객체가 없다면 배열 변수는 null값으로 초기화될 수 있음
형식1)
타입[] 변수;
ex) int[] intArray;
형식2)
타입 변수[];
double doubleArray[];
cf) null값으로 초기화 가능
타입[] 변수 = null;
3) 배열 생성
1) 값 목록 이용하기
타입[] 변수 = {값0, 값1, 값2, 값3, ...}
ex) String[] names = {"신용권", "홍길동", "김자바"}
2) new 연산자 이용하기 (*이미 배열이 생성된 경우)
타입 변수[] ;
변수 = new 타입[] {값0, 값1, 값2, 값3, ...};
ex)String[] names = null;
names = new String[] {"신용권", "홍길동", "김자바"}
3) new 연산자 이용하기(길이 지정)
타입[] 변수 = new 타입[길이];
ex) int[] intArray = new int[5];
타입별 배열의 초기화 값
int 배열 기본값 0
String 기본값 null
4) 배열 길이
- 배열에 저장할 수 있는 전체 항목의 개수
- length 필드를 통해 배열 길이 얻기
- 읽기 전용 필드로 값 변경은 안됨
int[] intArray = {10, 20, 30};
int num = intArray.length; //3 저장
5) 다차원 배열
- 2차원 배열
- 중첩 배열 방식으로 구현
- 1차원 배열일이 서로 연결된 구조로 수학적 행렬구조가 아닌 계단식 구조 가질 수 있음
06 클래스
06-1 객체 지향 프로그래밍