반응형
- 참조 타입 : 객체의 번지를 참조 (배열, 열거, 클래스, 인터페이스)
- 참조타입은 값으로 메모리의 번지를 가짐. 번지를 통해 객체 참조
- 변수 스택에 생성, 객체는 힙에 생성
- 메모리 사용 영역
- 메소드 영역 : 클래스를 클래스 로더로 읽어 클래스 별로 분류 -> JVM시작될 때 생성, 모든 스레드 공유
- 힙 영역: 객체와 배열 생성. JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
- JVM 스택 영역: 각 스레드마다 하나씩 존재, 스레드 시작될 때 할당. 메소드 호출할 때마다 프레임 추가, 메소드 종료되면 해당 프레임 제거. 프레임 내부에 로컬 변수 스택 존재.
- 문자열 리터럴이 동일하면 string 객체 공유.
- String name1="신용권";
- String name2="신용권";
- 위 두 변수는 동일한 객체 참조
- new 연산자 써서 힙 영역에 새로운 객체 만들면 서로 다른 String 객체 참조
- 참조 잃은 String 객체는 JVM이 쓰레기 객체로 취급하고 쓰레기 수집기를 구동시켜 메모리에서 자동으로 제거
- 배열 선언: 타입[ ] 변수; or 타입 변수[ ]; 두가지 방식으로 가능
- int[ ] intArrary;
- int intArray[ ];
- 배열 변수 이미 선언한 후 다른 실행문에서 중괄호 사용한 배열 생성 안됨.
- 배열 미리 선언 후 값 나중에 결정되는 경우 new연산자 사용해서 값 목록 지정해야함
- String[] names = null;
- names = new String[] {"신용권", "홍길동", "김자바"};
- 매개 변수로 int[] 배열이 선언된 add() 메소드의 경우 배열 생성 동시에 add() 메소드의 매개값으로 사용할 때 반드시 new사용해야함
- int result = add(new int[] {95,85});
- new로 배열 생성 타입[] 변수 = new 타입[길이];
- 배열 길이 : 배열변수.length;
- 커맨드 라인 입력: public static void main(String[] args)
- java 클래스로 프로그램 실행하면 JVM은 길이 0 인 String 배열 생성 -> main() 메소드 호출할 때 매개값으로 전달
- 배열 복사: for문 or System.arraycopy()
- System.arraycopy(Object src, int srcPos, Objsct dest, int destPos, int length);
- src: 원본배열 srcPos: 원본배열에서 복사할 항목의 시작 인덱스
- dest: 새배열 destPos: 새 배열에서 붙여넣을 시작 인덱스
- length: 복사할 개수
- 참조 타입 배열의 경우 배열 복사되면 복사되는 값이 객체의 번지이므로 새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일. -> 얕은 복사
- 깊은 복사는 참조하는 객체도 별도로 생성
- 향상된 for문: for( int score: scores )
- 열거타입 (enum)
- public enum Week { MONDAY, TUESDAY, WEDNESDAY..... }
- Week today = Week.SUNDAY;
- null도 저장 가능
- 열거 객체의 메소드
- name() : 열거 객체의 문자열을 리턴
- ordinal() : 열거 객체의 순번을 리턴
- compareTo() : 열거 객체를 비교해서 순번 차이를 리턴
- valueOf(String name) : 주어진 문자열의 열거 객체를 리턴
- values() : 모든 열거 객체들을 배열로 리턴
반응형
'코딩기록 > 자바' 카테고리의 다른 글
[자바의 정석] 클래스 멤버 변수, 인스턴스 멤버 변수 구분하기 (0) | 2023.03.09 |
---|---|
[이것이 자바다] Ch6. 클래스 (0) | 2023.03.07 |
[이것이 자바다] Ch4. 조건문과 반복문 (0) | 2023.01.17 |
[이것이 자바다] Ch3. 연산자 (0) | 2023.01.17 |
[이것이 자바다] Ch2. 변수와 타입 (0) | 2023.01.16 |