inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

연습 문제

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

해결된 질문

208

강동훈

작성한 질문수 33

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);

            }

        }

C#

답변 2

2

Rookiss

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

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

0

강동훈

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

Generic에 대한 질문 있습니다.

0

97

2

2022 버전에 커뮤니티 버전이 없는데 2026 버전으로 해도 무관?

0

203

2

다형성 캐시 문제

0

113

3

.

0

71

1

프로퍼티 강의 질문 있습니다.

0

79

1

이후 커리 질문

0

86

1

static

0

91

2

강의에는 새로운 클래스 파일을 생성하면...

0

72

1

생성자의 이름 선언

0

65

1

9:03 Divide(10 , 3) 부분 질문입니다

0

88

1

깃허브 관련 질문 있습니다.

0

239

1

비쥬얼 스튜디오 업데이트가 된건가요..? 매개변수 오류 관련 질문

0

249

1

C# 시리즈 || C++ 시리즈 자료구조 강의에 대한 질문입니다!

0

306

2

Activator 질문있습니다

0

332

1

이넘 타임 선언 질문

0

347

1

Sort 오름차순, 내림차순

0

323

1

질문 있습니다.

0

249

1

팩토리얼 문제

0

270

1

Sort함수 질문있습니다.

0

265

1

다형성 함수 질문 있습니다.

0

221

1

질문이 있습니다.

0

228

1

섹션2 연습문제 질문입니다.

0

214

1

안녕하세요~서버에 대해 질문이 있습니다.

1

283

1

텍스트 색깔이 제 편집기와 달라서 수강에 어려움이 있습니다ㅜㅜ

0

395

1