fullstack

[C++] 함수 오버로딩 (Function Overloading)

Language/C++

기존 C 컴파일러에서는 함수의 이름으로만 함수를 찾기 때문에 동일한 이름의 함수 정의는 불가능 했다.

하지만 C++ 컴파일러에서는 [함수의 이름 + 매개 변수의 정보]로 호출하고자 하는 함수를 찾기 때문에 함수의 이름이 같아도 매개변수의 타입이나 개수가 다르다면 함수명 중복을 허용한다.

이를 함수 오버로딩(Function Overloading) 이라 한다.

즉 함수 오버로딩이란 같은 이름의 함수를 매개변수의 타입이나 개수를 다르게 하여 여러개 정의하는 것이다.


다음은 함수 오버로딩의 예이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
void func()
{
    cout << " function(void) " << endl;
}
 
void func(int a, int b)
{
    cout << " function(int a, int b) " << endl;
}
 
void func(char c)
{
    cout << " function(char c) " << endl;
}



위와 같이 같은 이름의 함수를 여러개 정의 할 수 있다.

주의할것은 함수의 이름과 매개 변수의 정보가 같고 리턴타입만 다른 함수는 오버로딩되지 않는다.


'Language > C++' 카테고리의 다른 글

[C++] Reference  (0) 2015.11.29
[C++] namespace  (0) 2015.11.28
[C++] 인라인 함수 (Inline Function)  (0) 2015.11.28
[C++] 디폴트 매개 변수 (Default Parameter)  (0) 2015.11.28
[C++] for문 두줄로 구구단 출력하기  (0) 2015.11.09

[Unity3D] Coroutine

Unity

- Delay 만들기


일정 주기마다 실행되는 함수를 만들고 싶을때, 다음과 같이 만들 수 있다.


1
2
3
4
5
6
7
8
9
10
11
float accTime = 0;
float delay = 1;
 
void Update() {
    accTime += Time.deltaTime;
    if(accTime > delay)
    {
        func();
        accTime = 0;
    }
}



이는 Update문 안에서 accTime을 매 프레임마다 더해주고 accTime과 delay를 비교해서 처리하게되는데 Coroutine을 사용하면 더 간단하고 좋은 성능으로 만들 수 있다.


1
2
3
4
5
6
IEnumerator delay()
{
    yield return new WaitForSeconds(1f);
    func();
    StartCoroutine(delay());
}





- Coroutine


일반 함수는 호출하면 반환값을 반환하기 전에 실행이 완료되어 시간의 경과와 함께 일련의 이벤트에는 사용할 수 없다. 이는 Coroutine을 사용하면 편리하게 구현할 수 있다.

Coroutine은 실행을 중지하여 Unity에 제어권을 돌려주고, 계속할 때는 다음 프레임에서 중지한 곳부터 실행을 계속할 수 있는 기능이다.

즉 Coroutine을 사용하면 시간을 두거나 순차적으로 기능을 실행할 때 매우 유용하다.


가장 기본적인 Coroutine함수는 다음과 같다.


1
2
3
4
5
6
IEnumerator func()
{
    // event.
    yield return null;
    // event2.
}



Coroutine은 StartCoroutine 함수를 사용하여 실행하며, IEnumerator 형식을 반환값으로 가지고 yield return 구문을 포함하고 있어야 한다.

yield return 구문에는 일정시간은 기다리는 new WaitForSeconds(float) 이 가장 많이 쓰이며 다른 Coroutine이 끝날 때가지 대기하거나 웹 통신 작업이 끝날 때까지 대기하는 등 다양한 구문이 있다.


 yield return null

  다음 프레임까지 대기

 yield return new WaitForSeconds(float)

  지정된 초만큼 대기

 yield return new WaitForFixedUpdate()

  다음 물리 프레임까지 대기

 yield return new WaitForEndOfFrame()

  모든 렌더링 작업이 끝날 때까지 대기

 yield return StartCoroutine(string)

  다른 코루틴이 끝날 때까지 대기

 yield return new WWW(string)

  웹 통신 작업이 끝날 때까지 대기

 yield return new AsyncOperation

  비동기 작업이 끝날 때까지 대기(씬로딩)


[JSP] Google App Engine에서 Session 사용시 Error

Web

Google App Engine에서 JSP를 할때 Session 사용시 다음과 같은 500 Server Error가 발생한다.



해당 프로젝트 폴더의 war - WEB-INF 경로에 있는 appengine-web.xml 을 보면 다음과 같은 주석을 볼 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
  <!--
    HTTP Sessions are disabled by default. To enable HTTP sessions specify:
      <sessions-enabled>true</sessions-enabled>
    It's possible to reduce request latency by configuring your application to
    asynchronously write HTTP session data to the datastore:
      <async-session-persistence enabled="true" />
    With this feature enabled, there is a very small chance your app will see
    stale session data. For details, see
    http://code.google.com/appengine/docs/java/config/appconfig.html#Enabling_Sessions
  -->



이는 App Engine에서는 기본적으로 Session을 비활성화 한다고 되어있는데, 이유는 쓸모없이 낭비하는 자원을 막기 위해서인것 같다.

위의 주석을 해제하거나 아래 구문을 추가해주면 이제 Session을 사용할 수 있다.


1
<sessions-enabled>true</sessions-enabled>