• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

ref 에 대한 이해 부족이 있어 질문 드립니다.

20.12.24 02:01 작성 조회수 113

0

자료구조 맛보기 -연습문제

staic void Sort(int[] scores)에 관하여 영상을 보기 전 저는 해당 메소드가 원본 배열을 복사한다고 생각하여 swap을 해주는 과정에서 ref를 사용했습니다.

그 후 sort 메소드에서 scores 출력, 메인메소드에서 sort()후 scores 출력을 해봤는데 정상적으로 sort가 되더군요.

문제는 테스트로 ref를 제거해봤을 때 sort() 메소드 안에서 출력한 scores는 정렬이 되지만 원본인 메인메소드의 scores 는 정렬이 되지 않을 거란 생각과 달리 같이 정렬이 되어 있더군요.

ref에 대한 이해가 부족하다고 생각되어 이 문제에 관한 조언을 듣고 싶습니다. (항상 빠르고 친절한 답변 감사합니다!)

-

sort 코드

 static public void Sort(int[] scores) // 작은 순 정렬

        {

            //가장 간단한 방법

            //가장 큰 거부터 뒤로 하나 씩 옮기고 맨 뒤을 제외하고 다시 반복

            for (int i = 0; i < scores.Length; i++)

            {

                for(int j = 0; j <scores.Length-1; j++ )

                if (scores[j] > scores[j + 1])

                {

                        // Swap(ref scores[j], ref scores[j + 1]);

                        int temp = scores[j];

                        scores[j] = scores[j + 1];

                        scores[j + 1] = temp;

              

                }

            }

            foreach (int score in scores)

            {

                Console.WriteLine(score);

            }

        }

        //static void Swap(ref int a, ref  int b)

        //{

        //    int temp = a;

        //    a = b;

        //    b = temp;

        //}

main

static void Main(string[] args)

        {

            //배열 연습문제

            int[] scores = new int[5] { 10, 30, 50, 40, 20 };

            Program.GetHighestScore(scores);

            Program.GetAverageScore(scores);

            Program.GetIndexOf(scores, 50);

            Program.Sort(scores);

            

            foreach (int score in scores)

            {

                Console.WriteLine(score);

            }

        }

답변 2

·

답변을 작성해보세요.

2

기본적으로 값 형식인지, 참조 형식인지를 알아야 하는데
int, double, float, struct 등은 값 형식이고
class, 배열 등은 참조 형식입니다.

참조 형식이라 함은 주소값을 가지고  원본을 건드리는 형태이기 때문에
ref를 붙이지 않는다고 하더라도 원본이 수정됩니다.
사실 ref를 잘못 이해하신 것은 아니고,
배열이 참조 형태로 동작한다는 것을 간과하셔서 발생한 착오입니다.

0

강동훈님의 프로필

강동훈

질문자

2020.12.24

아! 기본적인 부분이었는데 실수했네요. 답변 감사합니다.