MLOps 개발자 양성과정/java

[Day-19] 참조타입, 클래스①

숲로 2023. 1. 18. 09:14

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 객체 지향 프로그래밍