왜.... 오셨나요?

부끄러워요

개발관련공부자료

함수(Function)

와피했는데 2023. 9. 22. 17:42


 * 미리 정해진 동작을 수행하는 코드 묶음
 * 어떤 처리를 미리 함수로 만들어 두면 다시 반복적으로 사용 가능

 

 

<함수 호출스택>
// 함수는 호출되었을 때 해당 함수블록으로 제어가 전송되며 완료되었을 때 원위치로 전송됨
// 이를 관리하기 위해 호출스택을 활용함
// 함수가 순환구조로 무한히 호출되어 더이상 스택에 빈공간이 없는 경우 StackOverflow가 발생

// 선입후출


static void Func4_1()
{                                   // (1)
Console.WriteLine("Func4_1");   // (2)
}                                   // (3)

static void Func4_2()
{                                   // (4)
Console.WriteLine("Func4_2");   // (5)
Func4_1();                      // (6)
}                                   // (7)

static void Main4()
{                                   // (8)
Func4_2();                      // (9)
}                                   // (10)
// 호출 순서 : (8) -> (9) -> (4) -> (5) -> (6) -> (1) -> (2) -> (3) -> (7) -> (10)

 

- 이론 : 함수를 호출할때 매개변수와 지역변수가 먼저 할당됨, 함수 호출 할때 return주소를 만들어 주게 됨 스텍에 담긴 함수의 경우 return값으로 현재 함수보다 먼저 들어간 함수의 주소값을 갖고있다. 그리고 this 또한 같이 갖고있다.

 

--------------------------------------------------------------

<오버로딩>

// 같은 이름의 함수를 매개변수를 달리하여 다른 함수로 재정의하는 기술static int Minus(int left, int right) { return left - right; }

static float Minus(float left, float right) { return left - right; }
static double Minus(double left, double right) { return left - right; }

static void Main5()
{
Console.WriteLine(Minus(5, 3));         // Minus(int, int) 가 호출됨
Console.WriteLine(Minus(5.0f, 3.0f));   // Minus(float, float) 가 호출됨
Console.WriteLine(Minus(5.0d, 3.0d));   // Minus(double, double) 가 호출됨
}


static void Main(string[] args)
{
Main1();
Main2();
Main3();
Main4();
Main5();
}

 

-이론 : 같은 이름이지만 다른 매개변수를 사용해서 이름만 같은 다른 함수를 만드는 기술이다 이렇게 다른 함수를 만드는 이유는 같은 기능, 비슷한 기능을 다양한 변수를 사용할수있게 하는 상황에서 쓰인다 

--------------------------------------------------------------

<오버라이딩>

// 같은 이름의 함수를 같은 매개변수를 사용하는 함수로 주로 부모와 자식 상속구조에서 사용된다 부모에서 사용하는 함수를 자식에서 기반은 같게 하고 다르게 재정의 하기 위한 기술이다(부모의 기능을 감추다 해서 하이딩이란 기술(new를 사용)을 쓰기도 한다.

 

 

 

'개발관련공부자료' 카테고리의 다른 글

객체지향 프로그래밍  (0) 2023.09.22
메모리 구조  (0) 2023.09.22
클래스 (Class)  (0) 2023.09.22
연산자  (0) 2023.09.22
자료형(Data Type)  (0) 2023.09.22