[혼공자][week2] Day7 참조하고 배열 생성까지

Ida·2025년 1월 19일
0

혼공자

목록 보기
7/20
post-thumbnail

알듯.. 말듯.. 아리송

05-1 참조 타입과 참조 변수

참조타입: 객체의 번지를 참조함. (배열, 열거, 클래스, 인터페이스)

1. 기본타입과 참조타입

참조타입은 클래스로 선언
(String 클래스 선언, intArray 배열 선언 등)

  • 기본타입(int, double 등)은 직접 값을 저장
  • 참조타입은 힙 영역에 객체 번지값을 저장

2. 메모리 사용 영역

  • 메소드 영역: JVM 시작시 생성, 모든 스레드가 공유함
  • 힙 영역: 객체와 배열이 생성됨. 쓰레기 수집기가 실행됨.(의미 없는 개체를 자동으로 삭제하는 기능)
  • JVM 스택 영역: 프레임을 추가(push)하고 프레임 제거(pop)하는 동작 수행

3. 참조 변수의 ==, != 연산

동일한 객체를 가질 경우
==는 true
!=는 false

4. null과 NullPointerException

힙 영역의 객체 참조 X일 때 null 값 저장. (초기값 사용 가능(
null로 초기화된 참조 변수는 스택 영역에 생성됨.

refVar1 = null일 때
refVar1 == null은 true
refVar1 != null은 false

참조변수 사용 시 발생하는 예외
NullPointException
참조 변수가 null이면 참조 객체가 없음. 이 상태에서 객체의 데이터(필드)나 메소드 사용하는 경우 오류 발생

5. String 타입

String name1 = "신용권";
String name2 = "신용권";

동일한 문자열 리터럴을 참조할 경우 동일한 String 객체를 참조함.

new 연산자로 힙 영역에 새로운 객체 만들어 사용 가능(객체 생성 연산자)

String name1 = new String("신용권");
String name2 = new String("신용권");

동일한 문자열일지라도 new연산자 사용 했기때문에 참조가 다름.

문자열 비교 (손코딩)

05-2 배열

같은 타입의 데이터를 나열한 후 인덱스를 부여해둔 자료구조.

score[] -> score 배열
인덱스는 0부터 시작

  • 배열은 같은 타입 데이터만 저장 가능
    -> 다른 타입 저장 시 타입 불일치 컴파일 에러 발생
  • 생성된 배열의 길이를 늘리거나 줄일 수 없음.

1. 배열 선언

  • 배열 변수 선언 기호: []
    데이터 타입[] 변수; or 데이터 타입 변수[];

  • 배열 변수가 null인 상태에서 변수[인덱스], 값을 읽거나 저장 하면 오류 발생

2. 배열 생성

값 목록으로 배열 생성

타입[] 변수 = {값1, 값2, 값3, ...};

{}에 있는 값들을 배열 객체 힙에 생성 후 번지를 리턴함.

값 목록 배열생성 1 (손코딩)

  • 배열 변수 선언 후 나중에 배열 생성은 허용 X
    이럴 경우 꼭 new()를 사용해서 값 목록 지정해주면 됨.
String[] names=null;
names = new String[] {"신용권", "홍길동", "감자바"};
  • 메소드의 매개값이 배열인 경우에도 new() 사용
int add(int[] scores) {...}

// 컴파일 에러
int result = add( {95, 85, 90} );

// 올바른 코딩
int result = add( new int[] {95, 85, 90} );

값 목록 배열생성 2 (손코딩)

  • 코드 작성시 return sum;을 빼고 작성 했더니 This method must return a result of type int 오류 메세지 발생

new 연산자로 배열 생성

  • 값 목록 없이 미리 배열을 만들고 싶을 때
    타입[] 변수 = new 타입[길이]처럼 new 연산자로 배열 객체 생성
  • 길이는 배열이 저장할 수 있는 값의 개수 지정

int[] intArray = new int[5];

  • intArray 배열은 길이가 5
  • int 배열이므로 모든 값은 0으로 초기화 됨.

타입별 배열의 초기값이 정해져있음.
ex) String타입의 경우 null값으로 초기화

new 연산자 배열 생성 (손코딩)

int, double, String 타입의 배열 초기값을 확인할 수 있음.

profile
나는 이다이다.

0개의 댓글

관련 채용 정보