자료구조와 알고리즘: 배열

wisdom·2022년 8월 16일
0

백엔드 개발자라면?

목록 보기
38/42

자료구조와 알고리즘을 함께 Java! 책을 참고해서 작성했습니다.

  • 처음 ~ 배열

배열

  • 같은 자료형을 메모리 상에 연속적으로 나열한 형태
  • 배열의 변수는 참조형 변수이고, 일반적인 변수와는 다른 성격을 가진다.
    - int num;의 변수를 선언하면 num 이라는 메모리 공간이 할당되고 값을 초기화할 때 메모리 공간에 값이 저장된다.
    - int[] arr의 배열을 선언하면 arr 이라는 메모리 공간이 할당되는데, 해당 메모리 공간에는 주소값을 가지는 형태이다.
  • 배열은 인덱스 기반으로 동작한다.
    - 인덱스
    - 각각의 배열 요소 메모리 주소에 바로 접근할 수 있는 값
  • 초기화가 되지 않은 상태에서의 배열 요소는 자료형에 따라 기본값이 저장된다.
    - 참조 타입 변수의 기본값은 모두 null
    - 나머지는 0, 0.0f, 0L, 0.0, '\u0000', false
  • 배열의 크기를 벗어난 인덱스로 요소에 접근하면?
    - ArrayIndexOutOfBoundsExceptions 예외가 런타임(실행시점)에 발생한다.
  • 배열 길이를 음수로 선언하면?
    - 배열도 객체이기 때문에 배열이 생성되는 런타임 시점에서 배열의 길이가 음수인 것을 확인하여 NegativeArraySizeException 예외가 발생한다.

foreach 반복문 사용할 수 없는 경우는?
배열의 연산으로 특정 위치에 값을 삽입, 삭제하거나 값을 읽어오는 경우(index 기반 연산 수행)

  • 참조 변수를 통해 배열이 저장된 메모리에 접근할 수 있는데, 만약 참조 변수만 복사가 된다면?
    - 사본 배열의 값을 변경하면 원본 배열의 값도 변경되어 서로 같은 배열의 공간을 바라보고 있는 것을 학인할 수 있음
    - 얕은 복사 shallow copy
  • 얕은 복사를 피하기 위해서는?
    - 새 배열을 생성하고 원본 배열의 요소 값들을 저장해 주어야 한다.
    - 사본 배열의 값이 변경되더라도 원본 배열의 값은 보존되어야 함
    - 서로 다른 배열 공간을 바라보는 것
    - 깊은 복사 deep copy
  • 자바에서 deep copy 를 지원하는 메서드
clone()
system.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Arrays.copyOf(...)
Arrays.copyRange(...)
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글