Transcript 자바I

제0주 온라인게임서버
프로그래밍
1. 모듈화란?
2. 함수 포인터, 윈도우즈형의 사용
3. 클래스와 상속,
4. 탬플릿,
5. 연산자 오버로딩, 스레드
교수 : 최 석 만
1. 모듈화란?
큰 프로젝트를 혼자서 프로그래밍 작업하기는 불가능함으로 프로젝
트를 모듈 별로 나눠서 개발한다. 본 게임 개발 프로젝트도 마찬가지
로 혼자서 작업할 수 없는 환경으로 여러 모듈로 나눠서 개발하는 것
이 좋다. 우선 서버 프로그램을 모듈 별로 나눠보면 엔진, 게임 로직,
관리 모듈로 나눌 수 있다.
모듈의 장점
1. 코드의 재활용이 극대화된다. 어떠한 프로그램이든 엔진 모듈 및
관리 모듈은 거의 변화가 없기 때문에 재활용이 높아진다.
2. 코드의 공유성이 높아진다. 클라이언트와 서버 프로그래머는 개별이다.
해서 클라이언트 프로그래머가 통신프로그래밍을 한다면 어려움을
겪을 수 있지만 서버 프로그래머가 통신프로그래밍을 한다면 프로그램
연계성이 있어서 쉽게 통신프로그래밍을 할 수 있다. 이러한 부분이 공
유성이다.
3. 코드의 관리가 편리합니다. 사소한 정의나 내용을 수정할 때 모듈화가
잘 되어 있다면 간단히 그 모듈만을 수정하면 되지만, 만약 반대의
경우라 하면 검색으로 일일이 수정할 부분을 찾아 작업을 해야 한다.
게임 모듈 구체화
모듈의 방법은 LIB, DLL, COM과 같은 모듈화 방법이 다양하다.
위의 모듈 방법의 장단점을 따지는 것보다 각자 프로젝트에 알맞은
방법을 택하면 된다.
1. LIB
2. COM
3. DLL
함수 포인터
(Delegate)
포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리
공간주소를 가리키는 변수를 말한다. 포인터가 가리키는 값을 가져오는
것을 역참조(逆參照, dereferencing)라고 한다.
일반적으로 포인터는 메모리 주소로 바꿀 수 있으며, 포인터는 다른 변수나
함수를 가리키도록 사용된다.
예) 함수포인터 ( Delegate ) - callback 함수가 delegate를 사용하는
대표적 예로서 다음과 같다.
void delegateSample( void (*fp)(int, int)/*function pointer*/, int data)
{ ………………
}
윈도우
(Windows)형
일반적으로 작업할 때 int, char 등의 ANSI표준형을 사용하지만, 게임서버프
로그래밍인 자바에서는 Windows API들을 사용한다.
아래 표는 ANSI와 API의 비교 테이블이다.
Windows
BOOL
BYTE
DWORD
DWORD_PTR
FLOAT
INT
INT32
INT64
CHAR
LPCSTR
ANSI
bool
signed char
unsigned long
unsigned long*
float
int
int
_int64
char
const char*
LPCTSTR
char* / wchar*
VOID
void
설명
TRUE/FALSE
8비트 변수
32비트 정수형 변수
32비트 정수형 포인터 변수
32비트 실수형 변수
32비트 정수형 변수
32비트 정수형 변수
64비트 정수형 변수
8비트 변수
8비트 문자열 변수
Multibyte, Unicode에 따라
달라짐
윈도우
(Windows)형
일반적으로 작업할 때 int, char 등의 ANSI표준형을 사용하지만, 게임서버프
로그래밍인 자바에서는 Windows API들을 사용한다.
아래 표는 ANSI와 API의 비교 테이블이다.
Windows
BOOL
BYTE
DWORD
DWORD_PTR
FLOAT
INT
INT32
INT64
CHAR
LPCSTR
ANSI
bool
signed char
unsigned long
unsigned long*
float
int
int
_int64
char
const char*
LPCTSTR
char* / wchar*
VOID
void
설명
TRUE/FALSE
8비트 변수
32비트 정수형 변수
32비트 정수형 포인터 변수
32비트 실수형 변수
32비트 정수형 변수
32비트 정수형 변수
64비트 정수형 변수
8비트 변수
8비트 문자열 변수
Multibyte, Unicode에 따라
달라짐
클래스와 상속
상속(Inheritance)
어떤 클래스를 중심으로 특성을 유지하거나 또 특성을 추가 하여 또다
른 클래스를 생성하는 것을 말한다. 이러한 상속에는 클래스를 중심으
로 하는 기본클래스, 슈퍼클래스, 슈퍼클래스의 상속을 받는 서브클래
스, 파생클래스로 구분한다.
자바는 다중상속을 지원하지 않으며 상속해주는 기본클래스와 상속받
는 서브 클래스로 나눌수 있다.
슈퍼 클래스를 지정하여 클래스 계층의 위치를 정할수 있고 슈퍼 클래
스를 지정하여 하위 클래스로 상속받을 때는 extends절을 이용한다.
클래스와 상속
클래스는 자바에서 설명하기로 하고 상속에 관하여 예를 들어 설명하면
다음 코드와 같다.
class A {
int i;
int j;
void setij(int x, int y)
{
i=x;
j=y;
}
}
class B extends A
{
int total;
int gob;
void sum()
{
}
total=i+j;
}
class Inheritance
{
public static void main(String args[])
{
B sub = new B();
sub.setij(25,5);
sub.sum();
System.out.println("두수의 합계는:"+sub.total);
}
}
템플릿
(Template)
템플릿이란 어떠한 형의 데이터로 처리할 수 있도록 만들어진 키워드
예를 들어 엔진 모듈을 만들어 데이터를 처리하는 형태이다. 물론 다른
모듈에서도 쉽게 활용할 수 있어서 쉽게 인터페이스 할 수 있다.
오버로딩(Overloading)
메소드 오버로딩(Overloading)
메소드의 이름이 같더라도 파라미터의 타입으로써 메소드를
구분하여 호출하고 실행
메소드 오버로딩 형식)
상위 메소드  choism1()
하위 메소드  choism1(int choi)