듣자마자 메소드 공대가 떠오르더라.
메서드는 코드의 재사용성, 모듈화, 그리고 가독성 향상에 기여하는 독립적인 기능 단위이다.
코드 재사용성:
메서드를 사용하면 동일 작업을 반복해서 구현하지 않아도 된다. 필요할 때 메서드를 호출해서 작업을 수행한다.
모듈화:
메서드로 코드를 작은 단위로 나눠 관리할 수 있다. 이렇게 하면 각 메서드가 특정 기능을 수행하게 되고 코드 구조가 명확해진다.
가독성과 유지보수성:
메서드 사용으로 코드가 간결해지고 읽기 쉬워진다. 코드 수정이 필요할 때도 해당 메서드만 수정하면 되니 유지보수도 쉬워진다.
코드 중복 제거:
반복 작업을 메서드로 묶어 사용하면 코드 중복을 막을 수 있다.
코드 추상화:
메서드를 통해 작업 단위를 추상화하고, 메서드 이름으로 해당 작업이 무엇을 하는지 알 수 있다.
메서드는 특정 작업을 수행하는 코드 블록으로, 필요할 때마다 호출된다.
[접근 제한자] [리턴 타입] [메서드 이름]([매개변수])
{
// 메서드 실행 코드
}
접근 제한자(Access Modifier):
메서드가 어디서 접근 가능한지 정한다.
주로 public
, private
, protected
등을 사용.
리턴 타입(Return Type):
메서드가 어떤 타입의 값을 반환하는지 정한다. 값이 없으면 void
를 쓴다.
메서드 이름(Method Name):
메서드 호출할 때 쓰는 이름이다.
호출할 때 이 이름을 사용.
매개변수(Parameters):
메서드에 전달되는 입력 데이터 값으로, 메서드 실행에 필요한 데이터다.
필요한 경우 0개 이상의 매개변수를 정의할 수 있다.
메서드 실행 코드(Method Body):
중괄호({}
) 안에 메서드가 수행하는 작업을 구현하는 코드를 구현한다.
// 예시 1: 반환 값이 없는 메서드
public void SayHello()
{
Console.WriteLine("안녕하세요!");
}
// 예시 2: 매개변수가 있는 메서드
public void GreetPerson(string name)
{
Console.WriteLine("안녕하세요, " + name + "님!");
}
// 예시 3: 반환 값이 있는 메서드
public int AddNumbers(int a, int b)
{
int sum = a + b;
return sum;
}
메서드 이름(전달할 매개변수);
- 예를 들어, `AddNumbers`라는 이름의 메서드를 호출하고자 할 때는 다음과 같이 호출합니다:
AddNumbers(10, 20);
호출 시 전달되는 매개변수는 메서드의 매개변수와 순서와 타입이 일치해야 합니다.
메서드는 호출되면 해당 메서드의 실행 코드를 수행하고, 필요한 경우 리턴 값이 있다면 반환합니다
매개변수는 메서드에 전달되는 입력 값이고, 메서드 내에서 이 값으로 작업을 수행한다.
반환값은 메서드의 실행 결과를 호출자에게 돌려주는 값이다.
메서드가 수행한 작업의 결과를 호출자에게 반환하는 값.
메서드의 리턴 타입에 지정되며, 해당 타입의 값을 반환해야 한다.
메서드 내에서 계산, 조작, 처리한 결과 등을 반환값으로 사용할 수 있다.
예제:
int AddNumbers(int a, int b)
{
int sum = a + b;
return sum;
}
// 메서드 호출 및 반환값 사용
int result = AddNumbers(10, 20);
Console.WriteLine("Sum: " + result);
void
: 반환값이 없는 메서드
예제:
void PrintMessage(string message)
{
Console.WriteLine("Message: " + message);
}
// 메서드 호출
PrintMessage("Hello, World!");
void
는 메서드가 값을 반환하지 않는다는 걸 나타낸다.
반환값이 없는 메서드는 호출되면 메서드의 실행 코드만 수행하고 호출자에게 반환하지 않는다.
메서드 사용 예시
void PrintLine()
{
for (int i = 0; i < 10; i++)
{
Console.Write("=");
}
Console.WriteLine();
}
void PrintLine2(int count)
{
for (int i = 0; i < count; i++)
{
Console.Write("=");
}
Console.WriteLine();
}
int Add(int a, int b)
{
return a + b;
}
[사용 예시]
PrintLine();
PrintLine2(20);
int result = Add(10, 20);
Console.WriteLine(result);
메서드 오버로딩은 같은 이름의 메서드를 다른 매개변수 목록으로 여러 번 정의하는 것이다. 매개변수의 수, 타입, 순서에 따라 적절한 메서드가 선택된다.
오버로딩은 메서드의 기능이나 작업은 동일하지만 입력값에 따라 다르게 동작해야 할 때 사용된다.
예1)
void PrintMessage(string message)
{
Console.WriteLine("Message: " + message);
}
void PrintMessage(int number)
{
Console.WriteLine("Number: " + number);
}
// 메서드 호출
PrintMessage("Hello, World!"); // 문자열 매개변수를 가진 메서드 호출
PrintMessage(10); // 정수 매개변수를 가진 메서드 호출
위 코드를 통해 알 수 있는 건, PrintMessage라는 메서드가 같은 이름어어도 매개변수의 타입에 따라 '각각 호출' 됨.
반환값이 달라도 동일한 메서드로 취급.
예2
)
int AddNumbers(int a, int b)
{
return a + b;
}
int AddNumbers(int a, int b, int c)
{
return a + b + c;
}
// 메서드 호출
int sum1 = AddNumbers(10, 20); // 두 개의 정수 매개변수를 가진 메서드 호출
int sum2 = AddNumbers(10, 20, 30); // 세 개의 정수 매개변수를 가진 메서드 호출
void CountDown(int n)
{
if (n <= 0)
{
Console.WriteLine("Done");
}
else
{
Console.WriteLine(n);
CountDown(n - 1); // 자기 자신을 호출
}
}
// 메서드 호출
CountDown(5);
재귀 호출의 활용과 주의점
재귀 호출은 복잡한 문제를 단순한 방식으로 해결할 수 있는 장점이 있습니다.
재귀 호출을 사용할 때 주의해야 할 점은 종료 조건을 명확히 정의해야 하며, 종료 조건을 만족하지 못하면 무한히 재귀 호출이 반복되어 스택 오버플로우 등의 오류가 발생할 수 있습니다.
재귀 호출은 메모리 사용량이 더 크고 실행 속도가 느릴 수 있으므로, 필요한 경우에만 적절히 사용하는 것이 좋습니다.
알고리즘에 많이 사용하는 편
메서드를 사용하면 코드 재사용성이 높아지고, 가독성 및 유지보수성도 개선된다.
예를 들어, 반복되는 로직을 메서드로 만들어두고 필요할 때마다 호출하면 되니까 코드가 간결해지고 관리하기도 쉬워진다.
예시
// 원의 넓이를 계산하는 메서드
double CalculateCircleArea(double radius)
{
double area = Math.PI * radius * radius;
return area;
}
// 사각형의 넓이를 계산하는 메서드
double CalculateRectangleArea(double width, double height)
{
double area = width * height;
return area;
}
// 메서드 활용
double circleArea = CalculateCircleArea(5.0);
double rectangleArea = CalculateRectangleArea(3.0, 4.0);
Console.WriteLine("원의 넓이: " + circleArea);
Console.WriteLine("사각형의 넓이: " + rectangleArea);
✔️ 구조체 사용 방법
struct
키워드로 선언한다. 멤버로는 변수와 메서드를 포함할 수 있다. 구조체를 사용할 때는 멤버에 점 .
연산자로 접근한다.struct Person
{
public string Name;
public int Age;
public void PrintInfo()
{
Console.WriteLine($"Name: {Name}, Age: {Age}");
}
}
// 구조체의 사용 예시
Person person1;
person1.Name = "John";
person1.Age = 25;
person1.PrintInfo();
구조체는 간단한 데이터 구조를 효율적으로 표현하는 데 유용하고, 다양한 데이터 타입을 하나의 단위로 관리할 수 있게 해준다.