1일 1공 - Java 참조 타입

BANG·2021년 4월 27일
0

1일 1공

목록 보기
1/5

참조 타입(reference type)

  • 객체의 메모리 번지를 참조하는 타입
  • 배열, 열거, 클래스, 인터페이스

메모리 사용 영역

힙 영역

  • 객체배열이 생성되는 영역
  • 참조하는 변수나 필드가 없으면 의미 없는 객체(쓰레기)

JVM 스택 영역

  • 스레드마다 1개씩 존재
  • 추가적인 스레드가 없으면 main 스레드만 존재
  • 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 제거함
  • 프레임 내부에 로컬 변수 스택이 존재

참조 변수의 ==, !=

  • 동일한 객체를 참조하는지 확인(주소값 비교)

null

  • 참조 타입 변수는 힙 영역의 객체를 참조하지 않는단 의미로 사용
  • null로 초기화된 참조 변수는 스택 영역에 생성

String 타입

  • 문자열 리터럴이 동일하면 String 객체를 공유함
  • new 연산자는 힙 영역에 새로운 객체를 만들 때 사용하는 연산자(객체 생성 연산자)
  • new를 사용해 객체를 생성하면 내용이 같아도 다른 객체를 참조

  • 문자열 자체를 비교할 때는 equals() 메서드 사용

배열 타입

  • 같은 타입의 많은 데이터를 다룰 때 필요한 자료구조
  • 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스(index)를 부여
  • 한 번 생성된 배열은 길이늘 변경할 수 없음
  • 길이를 변경하려면 새로운 배열을 생성하고 기존 배열을 복사하여 사용

배열의 선언

타입[] 변수명;

타입 변수명[];

값 목록으로 초기화

타입[] 변수명 = {값0, 값1, ...};

  • 배열 변수를 이미 선언하고 중괄호를 사용한 생성은 불가능
  • 최초 배열을 선언한 후면, new 연산자를 사용

    변수명 = new 타입[] {값0, 값1, ...};

  • 메서드의 매개값이 배열일 경우에도 new 연산자 사용

new 연산자로 배열 생성

  • 값 목록은 없으나 미리 배열을 만들고 싶을 때, new 연산자로 배열 생성

    타입[] 변수명 = new 타입[길이];

  • 이미 배열 변수를 선언한 후에도 가능

    타입[] 변수명 = null;
    변수명 = new 타입[길이];

  • new 연산자로 배열을 처음 생성하면 배열은 자동적으로 0으로 초기화됨
  • String 배열을 생성했다면 모두 null로 초기화됨

배열의 길이

  • 배열에 저장할 수 있는 전체 항목 수

    변수명.length;

  • length는 읽기 전용, 값을 바꿀 수 없음

커맨드 라인 입력

프로그램 실행에 main() 메서드가 필요
main()의 매개변수 String[] args

  • 'java 클래스'로 프로그램을 실행하면 JVM은 길이가 0인 String배열을 먼저 생성하고 main() 메서드를 호출할 때 매개값으로 전달
  • 'java 클래스' 뒤에 공백으로 구분된 문자열 목록을 주고 실행하면 main()메서드를 호출할 때 매개값으로 전달됨

    java 클래스명 문자열0 문자열1 ... 문자열 n-1

다차원 배열

  • 2차원 배열은 값들이 행과 열로 구성

객체를 참조하는 배열

  • 기본 타입 배열은 각 항목에 직접 값을 가짐
  • 참조 타입 배열은 각 항목에 객체의 번지를 가짐

배열 복사

  • 배열은 한 번 생성하면 크기 변경이 불가능 하므로 새로운 배열을 생성하고 복사가 필요
  • for문을 사용하거나 System.arraycopy()메서드 사용

System.arraycopy()메서드

System.arraycopy(원본 배열, 원본 배열의 복사를 시작할 인덱스, 복사 배열, 복사 배열의 붙여넣기를 시작할 인덱스, 복사할 개수);

for문

for(타입 변수명 : 배열) {
...실행문...
}

  • 배열 및 컬렉션 항목의 크기만큼 반복하고 자동으로 for문을 빠져나감

열거 타입

  • 한정된 값만을 갖는 데이터 타입
    ex) 요일, 1 ~ 12월

열거 타입 선언(public enum)

  • 열거 타입의 이름을 정하고 그 이름으로 소스파일(.java) 생성
  • 첮 문자를 대문자로하고 나머지는 소문자
  • public enum 키워드는 열거 타입을 선언하기 위한 키워드

    public enum 열거타입이름 {....}

열거 타입 변수

  • 열거 타입을 선언하면 사용 가능

  • 열거 타입도 하나의 데이터 타입

    열거타입 변수명;
    열거타입 변수명 = 열거타입.열거상수;

  • 열거 타입 변수도 참조 타입이므로 null 사용 가능

열거 타입 메서드

  • 열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있음
  • 메서드는 java.lang.Enum 클래스에 선언된 메서드
  • 모든 열거 타입은 컴파일 시에 Enum 클래스를 상속하게 됨
리턴 타입메서드설명
Stringname()열거 객체의 문자열 리턴
intordinal()열거 객체의 순번을 리턴(0부터 시작)
intcompareTo()열거 객체를 비교해서 순번 차이를 리턴
열거 타입valueOf(String name)주어진 문자열의 열거 객체를 리턴
열거 배열values()모든 열거 객체들을 배열로 리턴
profile
Record Everything!!

0개의 댓글