보글보글 개발일지
반응형
  • 참조 타입 : 객체의 번지를 참조 (배열, 열거, 클래스, 인터페이스)
  • 참조타입은 값으로 메모리의 번지를 가짐. 번지를 통해 객체 참조
  • 변수 스택에 생성, 객체는 힙에 생성
  • 메모리 사용 영역
    • 메소드 영역 : 클래스를 클래스 로더로 읽어 클래스 별로 분류 -> 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() : 모든 열거 객체들을 배열로 리턴
반응형
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!