2 Articles, Search for 'C++'

  1. 2009/02/14 Java/C++과 Object-C 비교하기
  2. 2008/09/11 MDB (MS Access DB) 제어 클래스 0.1
iPhone/팁&태크2009/02/14 04:14






 

Object-C의 특별한 문법 때문에 처음 접근이 어려우신 분들을 위해 간단하게 문법을 비교하여 보았습니다.

Messages
일반적으로 객체의 메서드를 호출하는 것을 Object-C에서는 메세지라고 표현합니다.

특정 객체의 메서드를 호출하는데 Java나 C++에서는 다음과 같이 표현합니다.

// Java
obj.method(parameter);

// C++
obj->method(parameter);

하지만 Object-C에서는 다음과 같이 표현합니다.
// Object-C
[obj method:parameter];

처음 볼때는 정말 어색했는데 자꾸 보다 보니깐 이제 좀 괜찮은거 같습니다. 오히려 소스코드를 볼때 메서드라고 확 튀어 보이니 더 좋은것 같기도 하네요.

Interface
Object-C에서 말하는 Interface 지시자는 Java나 C++에서 말하는 Class를 뜻합니다. 정확히는 선언부분만이라고 말해야겠군요.

좀더 정확히 말해보자면 메서드의 시그네이쳐를 선언해 둔다는 관점에서 Java에서 말하는 Interface와 비슷할 수도 있겠네요.

C++에서는 헤더파일안에 클래스의 선언부분과 같을 수 있겠고요. 구현부분은 .m 파일에서 합니다.

그렇다면 마찬가지로 Java와 C++의 예제 소스 코드를 보도록 할까요?
// Java
class classname extends superclassname {
// instance variables
int memberValue;

// member methods
return_type method1(param1_type param1, param2_type param2) { ... }
return_type method1(param1_type param1, param2_type param2) { ... }
}

// C++
class classname : superclassname {
// instance variables
int memberValue;

// member methods
return_type method1(param1_type param1, param2_type param2);
return_type method1(param1_type param1, param2_type param2);
}

Java의 예는 클래스의 구현부분이 클래스에 포함됩니다. Java의 Interface와 비교를 해볼려니 억지같고 추상클래스를 만들자니 또 억지 같아서 그냥 저렇게 써두었습니다.

그럼 Object-C의 구현 부분을 한번 볼까요?
// Object-C
@interface classname : superclassname {
// instance variables
int memberValue;
}

// member methods
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2;
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2;
@end

어떤가요? 이해가 되시나요? 그렇다면 이제 클래스의 구현부를 보도록 하겠습니다.

Implementation
Java의 경우에는 클래스 내부에서 그냥 메서드가 구현되었다고 치고 C++의 예를 한번 살펴 보겠습니다.
// C++
return_type classname::method1(param1_type param1, param2_type param2) {
...
}

return_type classname::method1(param1_type param1, param2_type param2) {
...
}

Object-C의 문법도 한번 볼 차례군요.
// Object-C
@implementation classname
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2 {
...
}
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2 {
...
}
@end


Instantiation
Object-C 에서는 객체를 생성하는 방법또한 독특한 느낌을 가지고 있습니다. 마찬가지로 비교를 한번 해볼까요?
// Java
MyObject obj = new MyObject();
obj.init();

// C++
MyObject *obj = new MyObject();
obj->init();

자 그렇다면 Object-C에서는 어떻게 하는지 알아볼까요?
// Object-C
MyObject *obj = [MyObject alloc];
[obj init];

혹은 다음과 같이 한줄로 사용할 수도 있습니다.
// Object-C
MyObject *obj = [[MyObject alloc] init];

어떤가요? 굉장히 색다른 느낌인가요?

지금까지 제 생각에 일반 프로그래밍 언어와 가장많이 다른 부분을 정리해 보았습니다. 이정도면 처음 Object-C를 봤을때의 혼란을 줄어들지 않을까 싶네요.

더 공부해 보고 싶으신 분은 [이곳]을 참고해 보시면 애플에서 잘 정리한 문서를 제공하고 있으니 참고하시면 되겠네요.

이글은 http://theeye.pe.kr/entry/compare_object_c_with_java_and_c 에서도 볼 수 있습니다.
Posted by 아이

Leave your greetings.

Research2008/09/11 13:18



[제작자 : AccessDenied]

1. 제목
    MDB (MS Access DB) 제어 클래스 0.1

2. 형태
    Class

3. 내용
    MDB 파일을 생성하거나 MDB에 접속하여 SQL Query를 실행할 수 있는 클래스 입니다.
리소스 자동 해제 및 exception이 wrapping 되어 있기 때문에 return value 만을 참고하여 error handling이 가능합니다.
또한 유니코드를 지원하도록 제작되었기 때문에 별도의 수정 없이 Windows platform 기반의 Visual Studio project에서 적용 가능합니다.

4. 환경
    OS : Windows 개열
    개발툴 : MFC

5. 사용법
    (1) InitInstance와 같은 시작 부분에 if(FAILED(::CoInitialize(NULL))) { ... } 와 같이 COM을 초기화
    (2) MDB 생성 시 Create("파일이름")
    (3) MDB에 접속 시 Open("파일이름")
    (4) MDB에 접속된 상태에서 Query를 이용한 데이터 편집은 Query("Query String")
    (5) SELECT 쿼리 후 데이터 조회 예시
CMDBManager MDB;
FieldPtr pField;

if(MDB.Open(_T("C:\\1.mdb")) == TRUE)
{
if(MDB.Query(_T("SELECT * FROM Table1")) == TRUE)
{
while(MDB.IsDataAvailable() == TRUE)
{
pField = MDB.FetchField(0);

printf(_T("%d\n"), MDB_FIELD_GET_INTEGER(p));

MDB.NextData();
}
}
}

    (6) 클래스 기능 모음

// 해당 Field가 NULL인지 체크
MDB_MANAGER_IS_FIELD_NULL(pField)
// 해당 Field 값을 LPCSTR 형태로 추출
MDB_MANAGER_FIELD_GET_LPCSTR(pField)
// 해당 Field 값을 Integer 형태로 추출
MDB_MANAGER_FIELD_GET_INTEGER(pField)
// 해당 Field 값을 Float 형태로 추출
MDB_MANAGER_FIELD_GET_FLOAT(pField)

// 새로운 MDB 파일 생성
BOOL Create(LPCTSTR pszFileName);
// MDB 파일 접속
BOOL Open(LPCTSTR pszFileName);
// MDB 파일 접속 해제
BOOL Close();
// SQL Query
BOOL Query(LPCSTR pszQuery);
// SELECT 와 같은 Query 후 데이터가 남아 있는지 확인
BOOL IsDataAvailable();
// 다음 데이터로 이동
BOOL NextData();
// nColIndex번째 column data를 얻어옴
FieldPtr FetchField(int nColIndex);
// 해당 nColIndex field가 NULL인지 체크
BOOL IsFieldNull(int nColIndex);
// MDB에 접속되어 있는지 확인
BOOL IsConnected();
// Recordset를 얻어옴
const _RecordsetPtr GetRecords();
// 구해진 데이터의 Field 개수를 얻어옴
long GetFieldCount();
// 해당 Field의 타입을 얻어옴
MDB_MANAGER_FIELD_TYPE GetFieldType(FieldPtr pField);

6. 기타
    GetFieldType()의 경우 현재까지 얻어온 데이터를 추측하여 값을 결정하기 때문에 정확하지 않을 수 있음.
Posted by Getroot

Leave your greetings.