라벨이 C인 게시물 표시

OOP in C

이미지
C에서도 객체지향적으로 코딩을 할 수가 있다.  하지만 C자체적으로 객체지향을 위한 키워드나 문법을 지원하지 않으므로 억지스럽고 비효율적인 측면이 있고 불가능한 부분도 존재한다. 객체지향의 핵심은 무엇일까? 1. Class (데이터 + 메소드) 와 캡슐화 2. 정보 은닉 및 추상화 3. 상속 4. 다형성 난 이 4가지가 객체지향의 핵심적인 개념이라고 생각한다. 일단 C에서 Class (데이터 + 메소드) 와 캡슐화의 개념을 implementation 하려면 설계를 객체지향적으로 하면 된다. Class같은 경우는 데이터는 구조체 안에 넣고, 메소드는 구조체이름_메소드이름 (구조체 포인터, ...) 이런 형태로 하면 된다... 만약 함수포인터를 이용하면 C++같은 문법으로 메소드를 사용할 수 도 있겠지만... 객체 만들때마다 함수포인터들을 초기화해줘야하므로 별로인 방법 같다. 추상화나 정보 은닉 같은 경우는 파일 분할과 static을 이용하면 가능하다. 아래에 그 예제가 있다. blackbox.h blackbox.c main.c main.c에서 6번째줄의 주석을 풀면 위와 같은 에러가 난다. main.c입장에서는 struct blackbox가 있다는 것 만 알지,  struct blackbox 내부 구조를 모르므로  그 크기를 모르기 때문에  변수를 만들수가 없다. 따라서 포인터를 사용해야한다. 포인터는 무조건 크기가 정해져있으므로 타입에 상관없이 변수를 할당할 수 있다. main.c에서 11,12번째 줄의 주석을 풀면 위와 같은 에러가 난다. 위에서 설명한 바와 같이  struct blackbox 내부구조를 모르므로 dereferencing이 불가능하다. 따라서 11,12번째줄에서 에러가 난다. 실행결과는 위와 같다. 위 코드에서는 성공적으로 private variable과 private/p...