쪽지발송 성공
Click here
재능넷 이용방법
재능넷 이용방법 동영상편
가입인사 이벤트
판매 수수료 안내
안전거래 TIP
재능인 인증서 발급안내

🌲 지식인의 숲 🌲

🌳 디자인
🌳 음악/영상
🌳 문서작성
🌳 번역/외국어
🌳 프로그램개발
🌳 마케팅/비즈니스
🌳 생활서비스
🌳 철학
🌳 과학
🌳 수학
🌳 역사
해당 지식과 관련있는 인기재능

안녕하세요.부동산, ​학원, 재고관리, ​기관/관공서, 기업, ERP, 기타 솔루션, 일반 서비스(웹, 모바일) 등다양한 분야에서 개발을 해왔습니...

JAVA,JSP,PHP,javaScript(jQuery), 등의 개발을 전문적으로 하는 개발자입니다^^보다 저렴한 금액으로, 최고의 퀄리티를 내드릴 것을 자신합니다....

안녕하세요.자기소개는 아래에 썼으니 참고부탁드리구요.(가끔 개인적 사정으로 인해 연락을 못받거나 답변이 늦어질 수 있습니다. 양해부탁...

타입 안전 열거형을 이용한 상태 기계 구현

2024-12-10 15:27:34

재능넷
조회수 641 댓글수 0

타입 안전 열거형을 이용한 상태 기계 구현 🎭

 

 

안녕, 친구들! 오늘은 정말 재미있고 유용한 주제에 대해 이야기해볼 거야. 바로 "타입 안전 열거형을 이용한 상태 기계 구현"이라는 거지. 😎 이게 뭔 소리냐고? 걱정 마! 천천히 설명해줄게.

먼저, 우리가 프로그래밍을 할 때 자주 마주치는 상황 중 하나가 바로 '상태'를 다루는 거야. 예를 들어, 게임 캐릭터의 상태(서있기, 걷기, 뛰기), 주문 처리 과정(주문 접수, 결제 완료, 배송 중, 배송 완료) 등이 있지. 이런 상태들을 관리하고 제어하는 걸 '상태 기계'라고 해. 근데 이걸 어떻게 하면 더 안전하고 효율적으로 만들 수 있을까? 바로 여기서 타입 안전 열거형이 등장하는 거야! 👏

C++에서 이런 개념을 활용하면 정말 멋진 코드를 만들 수 있어. 마치 재능넷에서 다양한 재능을 거래하듯이, 우리도 다양한 프로그래밍 기술을 조합해서 멋진 결과물을 만들어낼 수 있지. 자, 이제 본격적으로 파헤쳐볼까?

열거형(Enum)이란 뭘까? 🤔

열거형, 영어로는 Enumeration이라고 하는데, 간단히 말하면 관련된 상수들의 집합이야. 예를 들어, 요일을 나타내는 열거형을 만들어볼까?


enum Day {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

이렇게 하면 요일을 나타내는 상수들을 깔끔하게 모아놓을 수 있지. 근데 여기서 더 나아가면 어떨까? C++11부터는 열거형 클래스(enum class)라는 게 도입됐어. 이게 바로 우리가 오늘 주목할 '타입 안전 열거형'이야! 😃


enum class Day {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

이렇게 하면 뭐가 좋을까? 일반 열거형보다 훨씬 더 안전하고 명확해져. 예를 들어:

  • 다른 열거형과 이름이 겹쳐도 문제가 없어져.
  • 암시적인 형변환이 방지돼서 실수를 줄일 수 있어.
  • 코드의 가독성이 높아져.

이제 이 멋진 도구를 가지고 상태 기계를 만들어볼 거야. 마치 재능넷에서 다양한 재능을 조합해 새로운 가치를 만들어내듯이, 우리도 이 도구들을 조합해서 멋진 프로그램을 만들어낼 거야! 🚀

💡 팁: 열거형 클래스를 사용할 때는 항상 명시적으로 타입을 지정해줘야 해. 예를 들어 Day::MONDAY처럼 말이야. 이게 처음엔 좀 귀찮게 느껴질 수 있지만, 장기적으로 봤을 때 코드의 안정성을 크게 높여준다는 걸 기억해!

상태 기계(State Machine)란? 🎰

자, 이제 상태 기계에 대해 알아볼 차례야. 상태 기계라고 하면 뭔가 복잡하고 어려운 것 같지? 하지만 실제로는 우리 일상 생활에서도 쉽게 찾아볼 수 있어.

예를 들어, 자판기를 생각해보자. 자판기는 여러 가지 상태를 가질 수 있어:

  • 대기 중 (돈을 넣기 전)
  • 선택 대기 중 (돈을 넣은 후)
  • 음료 제공 중
  • 거스름돈 반환 중
  • 고장 상태

이런 식으로 특정 조건에 따라 상태가 변하는 시스템을 우리는 상태 기계라고 불러. 프로그래밍에서도 이런 개념을 그대로 적용할 수 있지.

자판기 상태 다이어그램 대기 중 선택 대기 중 음료 제공 중 거스름돈 반환 중

위의 다이어그램을 보면 자판기의 상태 변화를 한눈에 볼 수 있지? 이런 식으로 상태와 상태 간의 전이를 명확하게 정의하는 게 상태 기계의 핵심이야.

그럼 이걸 코드로 어떻게 구현할 수 있을까? 여기서 우리의 주인공인 타입 안전 열거형이 등장하는 거야! 😎


enum class VendingMachineState {
    IDLE,
    WAITING_FOR_SELECTION,
    DISPENSING,
    RETURNING_CHANGE,
    OUT_OF_ORDER
};

이렇게 열거형 클래스로 상태를 정의하면, 우리는 자판기의 상태를 명확하고 안전하게 표현할 수 있어. 이제 이걸 이용해서 실제로 상태 기계를 구현해볼 거야. 마치 재능넷에서 여러 재능을 조합해 멋진 프로젝트를 만들어내듯이 말이야! 🚀

💡 참고: 상태 기계는 게임 개발, 네트워크 프로토콜, 사용자 인터페이스 등 다양한 분야에서 활용돼. 한 번 익혀두면 정말 유용하게 쓸 수 있는 개념이니까 잘 배워두자!

타입 안전 열거형으로 상태 기계 구현하기 🛠️

자, 이제 우리가 배운 개념들을 모두 합쳐서 실제로 상태 기계를 구현해볼 거야. 예제로 간단한 자판기 시스템을 만들어볼게. 이 과정에서 타입 안전 열거형이 어떻게 활용되는지 잘 봐줘!


#include <iostream>
#include <string>

// 자판기의 상태를 나타내는 열거형 클래스
enum class VendingMachineState {
    IDLE,
    WAITING_FOR_SELECTION,
    DISPENSING,
    RETURNING_CHANGE,
    OUT_OF_ORDER
};

// 자판기 클래스
class VendingMachine {
private:
    VendingMachineState currentState;
    int balance;

public:
    VendingMachine() : currentState(VendingMachineState::IDLE), balance(0) {}

    void insertMoney(int amount) {
        if (currentState == VendingMachineState::IDLE) {
            balance += amount;
            currentState = VendingMachineState::WAITING_FOR_SELECTION;
            std::cout << "돈이 투입되었습니다. 현재 잔액: " << balance << "원\n";
        } else {
            std::cout << "현재 돈을 넣을 수 없는 상태입니다.\n";
        }
    }

    void selectDrink(int price) {
        if (currentState == VendingMachineState::WAITING_FOR_SELECTION) {
            if (balance >= price) {
                currentState = VendingMachineState::DISPENSING;
                balance -= price;
                std::cout << "음료가 나오고 있습니다...\n";
                dispense();
            } else {
                std::cout << "잔액이 부족합니다.\n";
            }
        } else {
            std::cout << "음료를 선택할 수 없는 상태입니다.\n";
        }
    }

    void dispense() {
        if (currentState == VendingMachineState::DISPENSING) {
            std::cout << "음료가 나왔습니다. 맛있게 드세요!\n";
            if (balance > 0) {
                currentState = VendingMachineState::RETURNING_CHANGE;
                returnChange();
            } else {
                currentState = VendingMachineState::IDLE;
            }
        }
    }

    void returnChange() {
        if (currentState == VendingMachineState::RETURNING_CHANGE) {
            std::cout << balance << "원을 반환합니다.\n";
            balance = 0;
            currentState = VendingMachineState::IDLE;
        }
    }

    void printState() {
        std::cout << "현재 상태: ";
        switch(currentState) {
            case VendingMachineState::IDLE:
                std::cout << "대기 중\n";
                break;
            case VendingMachineState::WAITING_FOR_SELECTION:
                std::cout << "음료 선택 대기 중\n";
                break;
            case VendingMachineState::DISPENSING:
                std::cout << "음료 제공 중\n";
                break;
            case VendingMachineState::RETURNING_CHANGE:
                std::cout << "거스름돈 반환 중\n";
                break;
            case VendingMachineState::OUT_OF_ORDER:
                std::cout << "고장\n";
                break;
        }
    }
};

int main() {
    VendingMachine vm;

    vm.printState();  // 초기 상태 출력
    vm.insertMoney(1000);
    vm.printState();
    vm.selectDrink(700);
    vm.printState();
    vm.insertMoney(500);  // 이 때는 돈을 넣을 수 없음
    vm.printState();

    return 0;
}

우와, 꽤 긴 코드지? 하지만 천천히 살펴보면 그렇게 어렵지 않아. 한 번 같이 분석해볼까?

  1. VendingMachineState 열거형 클래스: 자판기의 가능한 모든 상태를 정의해. 이게 바로 우리의 타입 안전 열거형이야!
  2. VendingMachine 클래스: 실제 자판기의 동작을 구현한 클래스야. 현재 상태(currentState)와 잔액(balance)을 멤버 변수로 가지고 있어.
  3. 상태 전이 메서드들: insertMoney, selectDrink, dispense, returnChange 등의 메서드들이 상태 전이를 담당해. 각 메서드는 현재 상태를 확인하고, 적절한 경우에만 상태를 변경해.
  4. printState 메서드: 현재 상태를 출력하는 메서드야. switch 문을 사용해서 각 상태에 따른 메시지를 출력해.

이 코드의 핵심은 타입 안전 열거형을 사용해 상태를 명확하게 정의하고, 각 상태에 따른 동작을 엄격하게 제어한다는 거야. 예를 들어, IDLE 상태에서만 돈을 넣을 수 있고, WAITING_FOR_SELECTION 상태에서만 음료를 선택할 수 있어. 이렇게 하면 예상치 못한 동작을 방지할 수 있지.

💡 꿀팁: 실제 프로젝트에서는 이런 상태 기계를 더 복잡하고 정교하게 만들 수 있어. 예를 들어, 각 상태에 대한 진입/퇴출 액션을 정의하거나, 상태 전이 테이블을 사용해 더 유연한 구조를 만들 수 있지. 마치 재능넷에서 다양한 재능을 조합해 더 멋진 프로젝트를 만들어내는 것처럼 말이야!

이런 방식으로 상태 기계를 구현하면, 코드의 구조가 명확해지고 버그도 줄일 수 있어. 특히 복잡한 시스템을 다룰 때 이런 접근 방식이 큰 도움이 될 거야. 😊

타입 안전 열거형의 장점 🏆

자, 이제 우리가 왜 그냥 열거형이 아니라 타입 안전 열거형을 사용했는지 자세히 알아볼 시간이야. 이 녀석이 어떤 점에서 대단한지 한번 살펴볼까?

  1. 타입 안전성: 타입 안전 열거형은 다른 타입과의 암시적 변환을 허용하지 않아. 이게 무슨 말이냐고? 예를 들어 볼게.

enum OldState { IDLE, RUNNING };
enum class NewState { IDLE, RUNNING };

void foo(OldState state) { /* ... */ }
void bar(NewState state) { /* ... */ }

int main() {
    foo(0);  // 컴파일 됨 (하지만 위험할 수 있어!)
    bar(0);  // 컴파일 에러!
    bar(NewState::IDLE);  // OK
    return 0;
}

보이지? 일반 열거형은 정수와 암시적으로 변환이 가능해서 의도치 않은 오류를 일으킬 수 있어. 하지만 타입 안전 열거형은 그런 걱정 없이 안전하게 사용할 수 있지.

  1. 이름 충돌 방지: 타입 안전 열거형은 자체적인 네임스페이스를 가져. 덕분에 다른 열거형이나 변수와 이름이 겹쳐도 문제가 없어져.

enum class Color { RED, GREEN, BLUE };
enum class TrafficLight { RED, YELLOW, GREEN };

Color c = Color::RED;  // OK
TrafficLight t = TrafficLight::RED;  // OK, 이름 충돌 없음!
  1. 코드 가독성 향상: 열거형 멤버를 사용할 때 항상 열거형 이름을 명시해야 해서, 코드를 읽을 때 어떤 열거형의 멤버인지 바로 알 수 있어.

if (currentState == VendingMachineState::IDLE) {
    // 이 코드만 봐도 IDLE이 VendingMachineState의 멤버라는 걸 바로 알 수 있지!
}
  1. 확장성: 타입 안전 열거형은 기본 타입을 지정할 수 있어. 이를 통해 더 큰 값 범위나 다른 타입(예: float)을 사용할 수 있지.

enum class BigState : unsigned long long {
    REALLY_BIG_NUMBER = 18446744073709551615ULL
};

이렇게 타입 안전 열거형을 사용하면, 코드의 안정성과 가독성이 크게 향상돼. 마치 재능넷에서 전문가의 도움을 받아 프로젝트의 품질을 높이는 것처럼 말이야! 😉

💡 Pro Tip: 가능하면 항상 타입 안전 열거형(enum class)을 사용하는 것이 좋아. 초기에는 조금 번거롭게 느껴질 수 있지만, 장기적으로 봤을 때 버그를 줄이고 코드의 품질을 높이는 데 큰 도움이 될 거야!

상태 기계의 실제 활용 사례 🌟

자, 이제 우리가 배운 이 멋진 기술을 어디에 쓸 수 있을지 알아볼까? 타입 안전 열거형을 이용한 상태 기계는 정말 다양한 분야에서 활용될 수 있어. 몇 가지 재미있는 예를 들어볼게!

  1. 게임 개발 🎮
  2. 게임 캐릭터의 상태를 관리하는 데 아주 유용해. 예를 들어 보자:

    
    enum class CharacterState {
        IDLE,
        WALKING,
        RUNNING,
        JUMPING,
        ATTACKING,
        DAMAGED,
        DEAD
    };
    
    class GameCharacter {
    private:
        CharacterState currentState;
    
    public:
        void update() {
            switch(currentState) {
                case CharacterState::IDLE:
                    // 대기 애니메이션 재생
                    break;
                case CharacterState::WALKING:
                    // 걷기 애니메이션 재생 및 위치 업데이트
                    break;
                // ... 기타 상태들 ...
            }
        }
    
        void receiveCommand(Command cmd) {
            // 명령에 따라 상태 전이
        }
    };
    

    이렇게 하면 캐릭터의 상태를 명확하게 관리할 수 있고, 각 상태에 따른 동작을 쉽게 구현할 수 있지.

  3. 네트워크 프로토콜 🌐
  4. 네트워크 연결의 상태를 관리하는 데도 상태 기계가 아주 유용해:

    
    enum class ConnectionState {
        DISCONNECTED,
        CONNECTING,
        CONNECTED,
        DISCONNECTING
    };
    
    class NetworkConnection {
    private:
        ConnectionState state;
    
    public:
        void connect() {
            if (state == ConnectionState::DISCONNECTED) {
                state = ConnectionState::CONNECTING;
                // 연결 시도 로직
            }
        }
    
        void disconnect() {
            if (state == ConnectionState::CONNECTED) {
                state = ConnectionState::DISCONNECTING;
                // 연결 종료 로직
            }
        }
    
        // 기타 메서드들...
    };
    

    이런 식으로 구현하면 네트워크 연결의 상태를 안전하게 관리할 수 있어. 잘못된 상태에서의 동작을 방지할 수 있지.

  5. 사용자 인터페이스 (UI) 🖥️
  6. UI 요소의 상태를 관리하는 데도 상태 기계를 활용할 수 있어:

    
    enum class ButtonState {
        NORMAL,
        HOVERED,
        PRESSED,
        DISABLED
    };
    
    class UIButton {
    private:
        ButtonState state;
    
    public:
        void update(const MouseInfo& mouse) {
            switch(state) {
                case ButtonState::NORMAL:
                    if (isMouseOver(mouse)) {
                        state = ButtonState::HOVERED;
                    }
                    break;
                case ButtonState::HOVERED:
                    if (!isMouseOver(mouse)) {
                        state = ButtonState::NORMAL;
                    } else if (mouse.isLeftButtonPressed()) {
                        state = ButtonState::PRESSED;
                    }
                    break;
                // 기타 상태들...
            }
        }
    
        void render() {
            // state에 따라 다른 이미지 렌더링
        }
    };
    

    이렇게 하면 버튼의 상태에 따라 다른 모습을 보여주고, 다른 동작을 수행하게 할 수 있어.

  7. 로봇 제어 🤖
  8. 로봇의 동작 상태를 관리하는 데도 상태 기계가 유용해:

    
    enum class RobotState {
        IDLE,
        MOVING,
        WORKING,
        CHARGING,
        ERROR
    };
    
    class Robot {
    private:
        Rob  otState state;
    
    public:
        void update() {
            switch(state) {
                case RobotState::IDLE:
                    // 대기 모드 동작
                    break;
                case RobotState::MOVING:
                    // 이동 로직 실행
                    break;
                case RobotState::WORKING:
                    // 작업 수행 로직
                    break;
                case RobotState::CHARGING:
                    // 충전 로직
                    break;
                case RobotState::ERROR:
                    // 에러 처리 및 보고
                    break;
            }
        }
    
        void handleCommand(Command cmd) {
            // 명령에 따라 상태 전이
        }
    };
    

    이런 식으로 로봇의 상태를 명확하게 관리하면, 복잡한 로봇 제어 시스템도 안전하고 효율적으로 구현할 수 있어.

이렇게 타입 안전 열거형을 이용한 상태 기계는 정말 다양한 분야에서 활용될 수 있어. 게임, 네트워크, UI, 로봇 공학 등 복잡한 시스템을 다루는 거의 모든 분야에서 유용하게 쓰일 수 있지. 마치 재능넷에서 다양한 전문가들의 재능이 여러 프로젝트에 활용되는 것처럼 말이야! 😊

💡 실무 팁: 상태 기계를 설계할 때는 먼저 상태 다이어그램을 그려보는 것이 좋아. 각 상태와 상태 간의 전이를 시각화하면 전체 시스템의 흐름을 더 쉽게 이해하고 구현할 수 있거든. 이건 마치 재능넷에서 프로젝트를 시작하기 전에 전체 계획을 세우는 것과 비슷해!

마무리: 타입 안전 열거형과 상태 기계의 미래 🚀

자, 이제 우리의 여정이 거의 끝나가고 있어. 타입 안전 열거형을 이용한 상태 기계에 대해 정말 많은 것을 배웠지? 이 기술은 단순히 현재의 트렌드가 아니라, 앞으로도 계속해서 중요한 역할을 할 거야.

왜 그럴까? 바로 소프트웨어 시스템이 점점 더 복잡해지고 있기 때문이야. 인공지능, 사물인터넷(IoT), 자율주행 자동차 등 첨단 기술들이 발전하면서, 이런 복잡한 시스템을 안전하고 효율적으로 관리할 수 있는 방법이 더욱 중요해지고 있어.

타입 안전 열거형을 이용한 상태 기계는 이런 복잡한 시스템을 다루는 데 아주 유용한 도구야. 왜냐하면:

  • 안전성: 타입 검사를 통해 많은 버그를 컴파일 타임에 잡아낼 수 있어.
  • 가독성: 코드의 의도를 명확하게 표현할 수 있어 유지보수가 쉬워져.
  • 확장성: 새로운 상태나 전이를 쉽게 추가할 수 있어 시스템의 진화에 유연하게 대응할 수 있어.

앞으로 프로그래밍을 하면서 복잡한 시스템을 다루게 될 때, 꼭 이 기술을 떠올려봐. 마치 재능넷에서 적절한 전문가를 찾아 프로젝트를 성공시키는 것처럼, 너희도 이 기술을 활용해 복잡한 문제를 우아하게 해결할 수 있을 거야.

그리고 기억해, 이건 단순한 프로그래밍 기술이 아니야. 이건 문제를 바라보는 새로운 시각이고, 시스템을 설계하는 강력한 도구야. 이런 사고방식은 프로그래밍뿐만 아니라 실생활의 문제를 해결하는 데도 큰 도움이 될 거야.

자, 이제 너희는 타입 안전 열거형과 상태 기계의 전문가가 됐어! 이 지식을 가지고 나가서 멋진 프로그램들을 만들어봐. 세상을 바꿀 수 있는 건 바로 너희야! 화이팅! 🎉🚀

🌟 마지막 조언: 프로그래밍은 계속 공부하고 실습해야 늘어나는 기술이야. 오늘 배운 내용을 꼭 실제 프로젝트에 적용해보고, 더 나아가 다른 고급 기술들도 공부해봐. 끊임없이 배우고 성장하는 것, 그게 바로 진정한 프로그래머의 자세야. 마치 재능넷에서 다양한 재능을 계속해서 발전시키는 것처럼 말이야!

관련 키워드

  • 열거형
  • 타입 안전
  • 상태 기계
  • C++
  • 프로그래밍
  • 객체지향
  • 게임 개발
  • 네트워크 프로토콜
  • 사용자 인터페이스
  • 로봇 제어

지적 재산권 보호

지적 재산권 보호 고지

  1. 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
  2. AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
  3. 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
  4. 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
  5. AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

해당 지식과 관련있는 인기재능

○ 2009년부터 개발을 시작하여 현재까지 다양한 언어와 기술을 활용해 왔습니다. 특히 2012년부터는 자바를 중심으로 JSP, 서블릿, 스프링, ...

 안녕하세요. 개발자 GP 입니다. 모든 사이트 개발은 웹사이트 제작시 웹표준을 준수하여 진행합니다.웹표준이란 국제표준화 단체...

 간단한 웹프로그래밍(php,asp.mssql,코딩,포토샵,html) 해드립니다. 저렴한 비용으로 신속하고 빠른 처리 하시길 바랍니다. 간단...

워드프레스를 설치는 했지만, 그다음 어떻게 해야할지 모르시나요? 혹은 설치가 어렵나요?무료 워드프레스부터 프리미엄 테마까지 설치하여 드립니...

📚 생성된 총 지식 10,550 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 1612, 7층 710-09 호 (영통동) | 사업자등록번호 : 131-86-65451
    통신판매업신고 : 2018-수원영통-0307 | 직업정보제공사업 신고번호 : 중부청 2013-4호 | jaenung@jaenung.net

    (주)재능넷의 사전 서면 동의 없이 재능넷사이트의 일체의 정보, 콘텐츠 및 UI등을 상업적 목적으로 전재, 전송, 스크래핑 등 무단 사용할 수 없습니다.
    (주)재능넷은 통신판매중개자로서 재능넷의 거래당사자가 아니며, 판매자가 등록한 상품정보 및 거래에 대해 재능넷은 일체 책임을 지지 않습니다.

    Copyright © 2024 재능넷 Inc. All rights reserved.
ICT Innovation 대상
미래창조과학부장관 표창
서울특별시
공유기업 지정
한국데이터베이스진흥원
콘텐츠 제공서비스 품질인증
대한민국 중소 중견기업
혁신대상 중소기업청장상
인터넷에코어워드
일자리창출 분야 대상
웹어워드코리아
인터넷 서비스분야 우수상
정보통신산업진흥원장
정부유공 표창장
미래창조과학부
ICT지원사업 선정
기술혁신
벤처기업 확인
기술개발
기업부설 연구소 인정
마이크로소프트
BizsPark 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창