개요
C#에서 정적(static) 메서드가 아닌 인스턴스 메서드를 사용하여 1차원 배열을 오름차순으로 정렬하는 방법을 알아보겠습니다. 이 예제에서는 선택 정렬(selection sort)과 유사한 중첩 반복문(nested for loop)을 활용해 배열의 요소를 서로 비교하고 교환하는 방식으로 정렬을 수행합니다.
1단계: 정렬되지 않은 배열 선언
먼저 정렬할 배열을 초기화합니다.
int[] list = {87, 45, 56, 22, 84, 65};2단계: 중첩 반복문으로 정렬 수행
다음으로, 배열을 매개변수로 전달받은 메서드 내부에서 중첩 for 루프를 사용해 요소를 정렬합니다. 바깥쪽 루프는 현재 위치를 기준으로 삼고, 안쪽 루프는 그 이후의 모든 요소와 값을 비교하여 더 작은 값이 앞쪽에 오도록 교환(swap)합니다.
for(int i=0; i< arr.Length; i++) {
for(int j=i+1; j<arr.Length; j++) {
if(arr[i]>=arr[j]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
Console.Write(arr[i] + " ");
}여기서 temp 변수는 두 요소의 값을 안전하게 맞바꾸기 위한 임시 저장소 역할을 합니다.
전체 예제 코드
아래는 비정적 메서드를 사용하여 1차원 배열을 오름차순으로 정렬하는 완전한 C# 코드입니다. Main 메서드 내에서 클래스의 인스턴스를 생성한 후, 해당 인스턴스를 통해 정렬 메서드를 호출하는 점이 핵심입니다.
using System;
namespace Demo {
public class MyApplication {
public static void Main(string[] args) {
int[] list = {87, 45, 56, 22, 84, 65};
Console.WriteLine("Original Unsorted List");
foreach (int i in list) {
Console.Write(i + " ");
}
// 인스턴스 생성 후 비정적 메서드 호출
MyApplication m = new MyApplication();
m.sortFunc(list);
}
// 비정적(인스턴스) 메서드로 정렬 구현
public void sortFunc(int[] arr) {
int temp = 0;
Console.WriteLine("\nSorted List");
for(int i=0; i< arr.Length; i++) {
for(int j=i+1; j<arr.Length; j++) {
if(arr[i]>=arr[j]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
Console.Write(arr[i] + " ");
}
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Original Unsorted List 87 45 56 22 84 65 Sorted List 22 45 56 65 84 87
핵심 포인트 정리
- 비정적 메서드 호출: 정적 메서드는 클래스 이름으로 직접 호출할 수 있지만, 인스턴스 메서드는 반드시
new키워드로 객체를 생성한 뒤 참조를 통해 호출해야 합니다. - 정렬 로직: 중첩 반복문을 사용하므로 시간 복잡도는 O(n²)입니다. 학습 목적에는 적합하지만, 실제 프로젝트에서는 성능이 중요한 경우
Array.Sort()와 같은 내장 메서드를 사용하는 것이 효율적입니다. - 배열의 참조 특성: C#에서 배열은 참조 타입이므로, 메서드 내부에서 변경된 값이 원본 배열에도 그대로 반영됩니다.