[TIL] 코드스테이츠 SEB BE Day 9

💡 Today I Will Learn

  • 배열
  • Pair - 계산기

✏️ Summary


  • 1차원 배열

    같은 타입의 많은 변수를 각각 담으려면 번거롭고 불편하다.

    int[] odd={1,3,5,7 ...};
    

    이때, 배열을 사용하면 편리하게 선언하여 활용할 수 있다.
    배열이 가진 각 값을 ‘요소’ 또는 ‘원소‘라 한다.

    System.out.println(odd[0]); // 1 출력
    

    odd[index]로 배열의 각 원소에 접근할 수 있다.

    • 배열의 선언과 초기화

      int[] arr;
      int arr[];
      
      int[] arr = new int[5]{1,2,3,4,5};
      

      배열은 변수가 값 자체를 저장하고 있는 것이 아닌, 값이 존재하는 위치의 시작 주소를 저장하는 참조변수이다.
      그 이유는 배열을 선언하고 컴퓨터가 메모리 공간을 확보할 때 배열의 크기가 얼마인지 알 수 없기 때문에, 배열을 가리키는 변수는 배열의 메모리 공간의 주소를 저장하게 된다. (인스턴스 생성 전)

    • 배열의 길이와 인덱스

      int[] arr = new int[5]{1,2,3,4,5};
      // arr[0] ~ arr[4]
      
      System.out.println(arr.length);
      // 5 출력
      

      배열의 인덱스는 0부터 시작하며, 배열의 길이는 .length로 확인할 수 있다.

  • 다차원 배열

    int[][] arr;
    int arr[][]; // 1차원 배열과 달리 불가능
      
    int[][] arr=new int[][]{
      {1,3,5},
      {2,4,8}
    } // 선언과 동시에 원소를 입력하여 초기화하는 경우. 크기는 명시하지 않아도 된다. 
    
    • 가변배열
    int[][] arr = int[3][];
    

    행의 개수는 명시하고, 열의 개수는 명시하지 않음으로 불필요한 공간을 생성하지 않는다.

  • 배열과 문자열

    char[] arr = new char[5]{'h','e','l','l','o'}; // 비효율적
    String str = new String("hello");
    

    char형 배열로 문자열을 구성하기에는 선언후 초기화 과정도 많고 특정 문자가 중복될 경우 메모리를 하나 이상 차지하기 때문에 비효율적이다.
    String 형에서 Literal 끼리, 인스턴스 끼리 같은 문자열을 쓴다면 한 메모리를 공유한다.

📌 정리


이번 유닛 마지막 페어프로그래밍은 계산기 만들기였다. 아주 간단한 기능만 구현하는 것이었는데, nextInt() 입력 후 Enter가 다음 nextLine()으로 처리되는 이슈를 제외하고는 큰 문제는 없었다.
다소 Java 기초 유닛은 이미 아는 문법들로 구성되어 있어서 많은 어려움은 없었던 것 같다. 다만 이제 닥칠 OOP는 꼼꼼히 정리하여 완벽학 개념을 이해하도록 해야겠다😊

👿 Problem

크기가 고정된 배열의 경우, 원소를 추가하거나 배열끼리 합쳐 새로운 배열을 만들어내는 것이 불가능하다.

👼 Solution

배열 복사를 지원하는 메서드를 이용하여 해결하였다.

  1. System.arraycopy

     System.arraycopy(src, srcPos, dest, destPos, length)
    

    원본배열(src)의 복사할 시작점(srcPos)를 설정하고, 붙여넣을 배열(dest)의 붙여넣을 지점(destPos)를 지정한 후 원본배열의 복사할 시작점부터 복사할 크기(length)를 지정한다.

  2. Arrays.copyOf, Arrays.copyOfRange

     Arrays.copyOf(arr, newLength)
     Arrays.copyOfRange(arr, from, to)
    

    배열(arr)을 새로운 길이(newLength) 만큼 복사하여 리턴하며 빈 곳은 Default 원소로 채운다.
    배열(arr)에서 복사할 시작지점(from) 부터 끝지점(to-1)까지를 복사하여 리턴한다.

🎯 Tomorrow


  • 블로깅
  • 클래스와 객체
  • 필드와 메서드

Back to [TIL] 코드스테이츠 SEB BE Day 8