사용자 삽입 이미지
  • 배열로 Bag 만들기

    지금까지 자바에서 배열을 사용하는 방법에 대해서 간단히 배웠습니다. 이젠 이 배열을 가지고 좀 응용해 볼까요? Bag을 만들어 봅시다! 이 Bag는 하나의 클래스이며, 숫자면 숫자만, 문자면 문자만 들어갈 수 있습니다. 하나하나 시작해 볼까요?

    1. Bag클래스 만들기

    일단 Bag클래스 껍데기를 만들어야겠죠? 이것까지 자세히는 말하지 않겠습니다. 기억이 안나시는 분은 지난 강좌를 참고하시구요.

    2. 필요한 변수들 생각하기

    어떤 변수들이 필요할까요? 일단, 가방안에 들어갈 내용을 저장할 배열, 가방안에 원소(여기서는 숫자나 문자가 되겠죠)가 몇 개나 있는지, 이정도의 변수만 있으면 되겠네요.

    3. 필요한 함수들 생각하기

    어떤 함수가 필요할까요? 음.. 일단 Bag이니깐.. 뭔가를 집어 넣어야 하겠죠? 그리고 가방에서 뭔가를 끄집어 낼 수도 있어야 하겠구요. 가방안에 숫자나 문자가 얼마나 들어있는지를 알아야 하겠죠? 가방을 싹 비우는 함수도 있어야 하겠군요. 가방안에 뭐가 있나 전부다 보여주는 함수도 있어야 하죠?

    4. 코딩

    일단 변수들부터 선언해 줄까요? 이제부터 나오는 코드는 특별한 말이 없으면 Bag 클래스 안에 있다고 가정합니다.

    일단 변수들부터 선언해 줄까요? 이제부터 나오는 코드는 특별한 말이 없으면 Bag 클래스 안에 있다고 가정합니다.

    // 가방안에 원소가 몇 개 있는지 저장하게 됩니다.

    private int number_of_items;

    // element라는 이름으로 배열을 다루게 됩니다.

    private int[] element;

    이정도면 필요한 변수들은 다 선언했군요. 이제 함수들을 하나씩 짜 볼까요? 생성자부터 하겠습니다.

    public Bag()

    {

      // 50개의 원소를 가질수 있는 배열을 생성합니다.

      element = new int[50];

      // Bag 클래스가 생성되므로 원소는 하나도 없겠죠?

      number_of_items = 0;

    }

    생성자가 하는일은 변수들을 초기화 하는 것입니다. 앞에서도 한번 설명드렸었죠. 이제는... 가방에 원하는 것들을 넣을 add 함수를 작성해 볼까요?

    public void add(int number)

    {

      element[number_of_items] = number;  // 원하는 원소를 배열에 넣죠

      numOfItems += 1;      // 원소가 하나 증가했으니 저 변수도 증가되야죠.

    }

    이제는 가방에서 원하는 원소를 빼야 하는 remove 함수도 필요하죠.

    public void remove(int number)

    {

      int index, i, remove_index;

      remove_index = 0;

      index = 0;

     

      // 지워야할 숫자가 데이터가 들어있는 element  배열의 어느 인덱스인지를   //찾아내는  코드입니다.

     for( i= 0 ; i< number_of_items ; i++ )

      {

        if( element[i] == number )

        {

          remove_index = i;

          break;

         }

       }

     

      // 위에서 찾은 지워야할 인덱스를 가지고, 그게 저장된 숫자들의 맨 끝인지,   //중간인지를 판별하여 그에 맞는 작업을 해주게 됩니다.

     if( remove_index == (m_number_of_items - 1) )

      {

        number_of_items -= 1;

      }

      else

      {

        element[remove_index] = element[number_of_items - 1];

        number_of_items -= 1;

      }

    }

    remove 함수는 다른함수에 비해서 꽤 복잡합니다. 지워야할 데이터가 데이터들이 들어가 있는 리스트의 맨 끝이라면 number_of_items만 하나 감소시켜주면 되지만, 지워야할 index가 배열의 중간이라면 배열 맨 끝의 원소를 지워야할 index로 옮겨주고 number_of_items를 하나 감소시켜 주면 됩니다. 분기문의 조건을 유심히 보신다면 아실 수 있을겁니다.

    이제 가방에 원소가 얼마나 들었는가를 알아내는 함수를 작성해보죠.

    public int get_number_of_items()

    {

       return number_of_items;

    }

    간단하죠? 클래스의 private 속성을 가진 변수의 값을 얻어오기 위한 액세스 함수일 뿐입니다.

    이제는 Bag을 비워주는 함수만이 남았네요. 생성자 함수와 유사한 일을 하게 됩니다.

    public void init_bag()

    {

      number_of_items = 0;

    }

    이거 역시 매우 간단합니다. number_of_items 만 0으로 초기화 시켜주면 됩니다. 이 함수를 호출하면 Bag 는 마치 빈 상태처럼 초기화가 될 것입니다. 어차피 접근은 number_of_items 변수를 가지고 접근을 하니깐요.

    이제는 Bag에 있는 원소들을 모두 출력해주는 함수를 작성해 보겠습니다.

    public void print_bag()

    {

     int i;

     for( i= 0 ; i< number_of_items ; i++ )

        System.out.ptintln( element[i] );

    }

    이제 Bag이 완성되었군요! 축하드립니다. 여러분들도 다 만들어 보셨으리라 믿습니다.

  • 강좌를 마치며...

    이제 3회 강좌가 끝났군요. 다른 강좌에 비해서 코드가 매우 많아졌습니다. 앞으로는 이런 강좌가 주를 이루게 될 듯 싶네요, 앞으로할 Linked List 나 Tree에서는 더욱 많아지는 코드를 기대해주세요. 강좌 다 읽으시느라 수고 하셨구요. 다음 강좌때 뵙도록 하죠!


  • Posted by 영웅기삼
    ,