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

🌲 지식인의 숲 🌲

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

안녕하세요.신호처리를 전공한 개발자 입니다. 1. 영상신호처리, 생체신호처리 알고리즘 개발2. 안드로이드 앱 개발 3. 윈도우 프로그램...

 안녕하세요. 안드로이드 기반 개인 앱, 프로젝트용 앱부터 그 이상 기능이 추가된 앱까지 제작해 드립니다.  - 앱 개발 툴: 안드로이드...

 [프로젝트 가능 여부를 확인이 가장 우선입니다. 주문 전에 문의 해주세요] ※ 언어에 상관하지 마시고 일단 문의하여주세요!※ 절대 비...

안녕하세요. 경력 8년차 프리랜서 개발자 입니다.피쳐폰 2g 때부터 지금까지 모바일 앱 개발을 전문적으로 진행해 왔으며,신속하 정확 하게 의뢰하...

C++ 리플렉션의 미래와 현재

2024-11-23 00:36:36

재능넷
조회수 153 댓글수 0

C++ 리플렉션의 미래와 현재: 코드의 자기 인식 여행 🚀

 

 

안녕, 친구들! 오늘은 C++의 세계에서 꽤나 흥미진진한 주제를 파헤쳐볼 거야. 바로 '리플렉션'이라는 녀석이지. 뭔가 거울 앞에서 자기 모습을 비춰보는 것 같은 느낌이 들지 않아? 실제로 프로그래밍에서의 리플렉션도 비슷한 개념이야. 코드가 자기 자신을 들여다보고 분석하는 능력이라고 할 수 있지. 😎

우리가 이 여정을 떠나기 전에, 잠깐! 혹시 너희 중에 프로그래밍 실력을 더 키우고 싶은 친구들 있어? 그렇다면 재능넷(https://www.jaenung.net)이라는 곳을 한번 들러봐. 여기서는 다양한 프로그래밍 관련 재능을 나누고 배울 수 있어. C++ 고수들의 노하우를 직접 전수받을 수 있는 기회일지도 몰라!

자, 이제 본격적으로 C++ 리플렉션의 세계로 뛰어들어볼까? 준비됐어? 그럼 출발~! 🏁

리플렉션이 뭐길래? 🤔

리플렉션이라... 뭔가 철학적인 느낌이 들지 않아? 하지만 프로그래밍에서는 그렇게 심오한 개념은 아니야. 간단히 말하면, 프로그램이 실행 중에 자기 자신의 구조와 동작을 살펴보고 수정할 수 있는 능력을 말해. 마치 우리가 거울을 보며 "오, 내 머리가 이렇게 생겼구나!"라고 깨닫는 것처럼 말이야.

C++에서 리플렉션을 사용하면 뭐가 좋을까? 예를 들어볼게:

  • 🔍 클래스의 구조를 런타임에 분석할 수 있어
  • 🛠️ 동적으로 객체를 생성하거나 함수를 호출할 수 있지
  • 📝 프로퍼티나 메서드의 이름을 문자열로 다룰 수 있어
  • 🎭 타입 정보를 실행 중에 확인할 수 있지

이런 기능들이 있으면 뭐가 좋을까? 음... 예를 들어, 너가 게임을 만들고 있다고 해보자. 플레이어가 새로운 아이템을 획득했을 때, 그 아이템의 속성을 동적으로 확인하고 적용할 수 있어. 아이템의 클래스 구조를 미리 다 알고 있지 않아도 되니까 코드가 훨씬 유연해지는 거지!

재능넷 팁: C++의 리플렉션 개념을 마스터하면 더 유연하고 강력한 프로그램을 만들 수 있어. 재능넷에서 C++ 고급 과정을 찾아보는 것도 좋은 방법이야!

하지만 여기서 한 가지 문제가 있어. C++는 원래 리플렉션을 완전히 지원하지 않았어. 😱 그래서 지금부터는 C++에서 리플렉션이 어떻게 발전해왔는지, 그리고 앞으로 어떻게 될지 알아볼 거야. 흥미진진하지 않아?

C++의 리플렉션 현재: 우리가 어디까지 왔나? 🏃‍♂️

자, 이제 C++의 리플렉션 현재 상황에 대해 얘기해볼까? 솔직히 말하면, C++는 리플렉션 측면에서는 좀 늦은 편이야. 다른 언어들은 이미 리플렉션을 풍성하게 지원하고 있는데 말이지. 하지만 우리의 C++도 조금씩 발전하고 있어! 👍

현재 C++에서 리플렉션과 비슷한 기능을 하는 몇 가지 방법들이 있어:

  1. RTTI (Run-Time Type Information): 이건 실행 중에 객체의 타입 정보를 얻을 수 있게 해주는 기능이야.
  2. typeid 연산자: 이걸 사용하면 객체의 타입 정보를 얻을 수 있어.
  3. dynamic_cast: 이건 다형성을 가진 객체들 사이에서 안전한 타입 변환을 할 때 사용해.

이런 기능들을 사용하면 어느 정도 리플렉션과 비슷한 효과를 낼 수 있어. 하지만 완전한 리플렉션은 아니지. 예를 들어볼게:


#include <iostream>
#include <typeinfo>

class MyClass {
public:
    virtual void foo() {}
};

class DerivedClass : public MyClass {
public:
    void foo() override {}
};

int main() {
    MyClass* obj = new DerivedClass();
    
    // typeid를 사용한 타입 정보 출력
    std::cout << "Type of obj: " << typeid(*obj).name() << std::endl;
    
    // dynamic_cast를 사용한 타입 확인
    if(dynamic_cast<DerivedClass*>(obj)) {
        std::cout << "obj is of type DerivedClass" << std::endl;
    }
    
    delete obj;
    return 0;
}
  

이 코드를 실행하면, obj의 실제 타입이 DerivedClass라는 것을 알 수 있어. 하지만 이게 전부야. 클래스의 메서드나 속성 목록을 가져온다거나, 동적으로 메서드를 호출하는 건 불가능해. 😞

주의할 점: RTTI를 사용하면 프로그램의 실행 속도가 조금 느려질 수 있어. 그래서 꼭 필요한 경우에만 사용하는 게 좋아!

그래서 많은 C++ 개발자들은 자체적인 리플렉션 시스템을 만들어 사용하고 있어. 예를 들어, 매크로나 템플릿 메타프로그래밍을 활용해서 말이야. 하지만 이런 방법들은 복잡하고 유지보수가 어려울 수 있지.

음... 이쯤에서 우리 잠깐 쉬어갈까? C++ 리플렉션에 대해 배우다 보면 머리가 좀 아플 수 있어. 이럴 때 재능넷(https://www.jaenung.net)에서 다른 개발자들과 소통하며 아이디어를 나누는 것도 좋은 방법이야. 때로는 다른 사람의 관점이 새로운 통찰을 줄 수 있거든! 😊

자, 이제 C++의 현재 상황에 대해 알아봤으니, 미래는 어떨지 궁금하지 않아? 그럼 다음 섹션으로 고고! 🚀

C++의 리플렉션 미래: 빛나는 내일을 향해! 🌟

자, 이제 정말 신나는 부분이야! C++의 리플렉션 미래에 대해 얘기해볼 거거든. 솔직히 말해서, C++ 커뮤니티에서는 오래전부터 리플렉션의 필요성을 느끼고 있었어. 그래서 지금 열심히 준비 중이야. 어떤 모습일지 같이 살펴볼까? 🕵️‍♂️

1. 스태틱 리플렉션 (Static Reflection)

C++의 미래 리플렉션은 '스태틱 리플렉션'에 초점을 맞추고 있어. 이게 뭐냐고? 간단히 말하면, 컴파일 타임에 타입 정보를 분석하고 조작할 수 있게 해주는 기능이야. 런타임이 아니라 컴파일 타임이라고? 맞아, 이렇게 하면 성능 저하 없이 리플렉션의 이점을 누릴 수 있거든!

예를 들어, 이런 식으로 사용할 수 있을 거야:


// 미래의 C++ 코드 (아직 구현되지 않음)
#include <reflection>

struct Person {
    std::string name;
    int age;
};

int main() {
    // Person 구조체의 모든 멤버 변수 이름 출력
    for (const auto& member : std::reflect(Person).members()) {
        std::cout << member.name() << std::endl;
    }
    return 0;
}
  

이 코드가 실제로 동작한다면, "name"과 "age"가 출력될 거야. 멋지지 않아? 😎

2. 메타클래스 (Metaclasses)

메타클래스라는 개념도 제안되고 있어. 이건 뭐냐면, 클래스를 정의하는 클래스야. 음... 좀 복잡해 보이지? 쉽게 설명해줄게.

예를 들어, 너가 여러 개의 비슷한 클래스를 만들어야 한다고 해보자. 각 클래스마다 일일이 코드를 작성하는 대신, 메타클래스를 사용해서 클래스의 '템플릿'을 만들 수 있어. 이 템플릿을 바탕으로 컴파일러가 실제 클래스를 생성하는 거지.


// 미래의 C++ 코드 (아직 구현되지 않음)
metaclass Interface {
    constexpr {
        for... (auto f : __cpp_methods()) {
            if (!f.has_access(public)) {
                compiler.error("인터페이스의 모든 메서드는 public이어야 합니다");
            }
            if (!f.is_virtual()) {
                compiler.error("인터페이스의 모든 메서드는 virtual이어야 합니다");
            }
        }
    }
};

Interface IAnimal {
    virtual void makeSound() = 0;
    virtual int getAge() = 0;
};
  

이 코드에서 Interface라는 메타클래스는 모든 메서드가 public이고 virtual인지 확인해. 만약 그렇지 않으면 컴파일 에러를 발생시키지. 이렇게 하면 인터페이스의 규칙을 쉽게 강제할 수 있어!

재능넷 꿀팁: C++의 미래 기능들을 미리 공부해두면 나중에 큰 도움이 될 거야. 재능넷에서 C++ 최신 동향에 대한 강의를 찾아보는 건 어때?

3. 컴파일 타임 프로그래밍의 강화

C++의 미래는 컴파일 타임 프로그래밍을 더욱 강화하는 방향으로 가고 있어. 이게 무슨 말이냐면, 프로그램의 많은 부분을 컴파일 때 미리 처리할 수 있게 된다는 거야. 이렇게 하면 실행 속도는 빨라지고, 런타임 에러는 줄어들지.

예를 들어, 이런 식으로 사용할 수 있을 거야:


// 미래의 C++ 코드 (아직 구현되지 않음)
constexpr {
    for (const auto& method : std::reflect(MyClass).methods()) {
        if (method.name().starts_with("test")) {
            // 모든 "test"로 시작하는 메서드에 대해 자동으로 테스트 케이스 생성
            generate_test_case(method);
        }
    }
}
  

이 코드는 MyClass의 모든 메서드를 컴파일 타임에 검사하고, "test"로 시작하는 메서드에 대해 자동으로 테스트 케이스를 생성해. 테스트 주도 개발(TDD)을 하는 개발자들에게는 정말 꿈같은 기능이겠지? 😍

4. 더 강력해진 템플릿 메타프로그래밍

C++의 템플릿 메타프로그래밍은 이미 강력하지만, 미래에는 더욱 강력해질 거야. 리플렉션과 결합된 템플릿 메타프로그래밍은 거의 마법 같은 일을 할 수 있게 될 거야.

예를 들어, 이런 게 가능해질 수 있어:


// 미래의 C++ 코드 (아직 구현되지 않음)
template<typename T>
auto serialize(const T& obj) {
    json result;
    constexpr {
        for (const auto& member : std::reflect(T).members()) {
            result[member.name()] = obj.*member;
        }
    }
    return result;
}
  

이 코드는 어떤 타입의 객체든 자동으로 JSON으로 직렬화해주는 함수야. 클래스의 모든 멤버를 자동으로 처리하니까, 새로운 멤버를 추가하더라도 이 함수를 수정할 필요가 없어. 완전 편하지 않아? 🎉

자, 여기까지가 C++ 리플렉션의 미래야. 정말 기대되지 않아? 하지만 이런 기능들이 실제로 C++ 표준에 포함되려면 아직 시간이 좀 걸릴 거야. 그동안 우리는 뭘 해야 할까?

  1. 현재 사용 가능한 기술들(RTTI, typeid 등)을 최대한 활용하기
  2. 라이브러리를 활용하기 (예: Boost.Hana, magic_get 등)
  3. C++ 표준 위원회의 결정 사항을 주시하기
  4. 실험적인 컴파일러 기능을 테스트해보기

그리고 가장 중요한 건, 계속해서 공부하고 경험을 쌓는 거야. 여기서 또 재능넷(https://www.jaenung.net)을 추천하고 싶어. C++ 고급 기술에 대한 강의나 프로젝트를 찾아볼 수 있을 거야. 다른 개발자들과 아이디어를 교환하는 것도 좋은 방법이고!

자, 이제 C++ 리플렉션의 미래에 대해 알아봤어. 흥미진진하지 않아? 다음 섹션에서는 이런 미래 기술들이 실제로 어떤 영향을 미칠지 살펴볼 거야. 준비됐어? 그럼 고고! 🚀

리플렉션의 실제 응용: 코드의 마법사가 되자! 🧙‍♂️

자, 이제 우리가 배운 리플렉션이 실제로 어떻게 쓰일 수 있는지 알아볼 차례야. 리플렉션은 정말 다양한 분야에서 활용될 수 있어. 마치 스위스 군용 칼처럼 여러 가지 용도로 쓸 수 있지. 어떤 분야들이 있는지 함께 살펴볼까? 🕵️‍♀️

1. 직렬화와 역직렬화 (Serialization & Deserialization)

직렬화는 객체를 저장하거나 네트워크로 전송할 수 있는 형태로 변환하는 과정이야. 역직렬화는 그 반대고. 리플렉션을 사용하면 이 과정을 완전 자동화할 수 있어!


// 미래의 C++ 코드 (아직 구현되지 않음)
template<typename T>
std::string serialize(const T& obj) {
    std::stringstream ss;
    constexpr {
        for (const auto& member : std::reflect(T).members()) {
            ss << member.name() << ":" << obj.*member << ",";
        }
    }
    return ss.str();
}

// 사용 예
struct Person {
    std::string name;
    int age;
};

Person p{"Alice", 30};
std::string serialized = serialize(p);
// 결과: "name:Alice,age:30,"
  

이렇게 하면 어떤 구조체나 클래스든 자동으로 직렬화할 수 있어. 새로운 멤버를 추가해도 serialize 함수를 수정할 필요가 없지. 완전 편하지 않아? 😎

2. 객체-관계 매핑 (ORM: Object-Relational Mapping)

데이터베이스 프로그래밍을 해본 적 있어? ORM은 객체와 데이터베이스 테이블을 매핑해주는 기술이야. 리플렉션을 사용하면 이 과정을 엄청 간단하게 만들 수 있어.


// 미래의 C++ 코드 (아직 구현되지 않음)
template<typename T>
std::string generateInsertQuery(const T& obj) {
    std::stringstream ss;
    ss << "INSERT INTO " << std::reflect(T).name() << " (";
    
    constexpr {
        for (const auto& member : std::reflect(T).members()) {
            ss << member.name() << ",";
        }
    }
    ss.seekp(-1, std::ios_base::end);  // 마지막 쉼표 제거
    ss << ") VALUES (";
    
    constexpr {
        for (const auto& member : std::reflect(T).members()) {
            ss << "'" << obj.*member << "',";
        }
    }
    ss.seekp(-1, std::ios_base::end);  // 마지막 쉼표 제거
    ss << ")";
    
    return ss.str();
}

// 사용 예
Person p{"Bob", 25};
std::string query = generateInsertQuery(p);
// 결과: "INSERT INTO Person (name,age) VALUES ('Bob','25')"
  

이렇게 하면 어떤 객체든 자동으로 SQL 쿼리를 생성할 수 있어. 데이터베이스 작업이 훨씬 쉬워지겠지? 👨‍💻

3. 단위 테스트 자동화

단위 테스트... 중요하지만 좀 지루하다고 생각하지 않아? 리플렉션을 사용하면 테스트 케이스를 자동으로 생성할 수 있어!


// 미래의 C++ 코드 (아직 구현되지 않음)
template<typename T>
void generateTests() {
    constexpr {
        for (const auto& method : std::reflect(T).methods()) {
            if (method.name().starts_with("test")) {
                TEST_CASE(method.name()) {
                    T obj;
                    obj.*method();
                    // 여기에 assertion을 추가할 수 있어
                }
            }
        }
    }
}

// 사용 예
class MyTestSuite {
public:
    void testAddition() { /* ... */ }
    void testSubtraction() { /* ... */ }
    void normalMethod() { /* ... */ }
};

generateTests<MyTestSuite>();
  

이렇게 하면 "test"로 시작하는 모든 메서드에 대해 자동으로 테스트 케이스가 생성돼. 테스트 코드 작성이 훨씬 쉬워지겠지? 🎉

4. 플러그인 시스템

리플렉션을 사용하면 동적으로 클래스를 로드하고 인스턴스화할 수 있어. 이건 플러그인 시스템을 만들 때 정말 유용해!


// 미래의 C++ 코드 (아직 구현되지 않음)
class PluginManager {
public:
    template<typename T>
    void registerPlugin(const std::string& name) {
        plugins[name] = []() { return std::make_unique<T>(); };
    }

    std::unique_ptr<IPlugin> createPlugin(const std::string& name) {
        if (auto it = plugins.find(name); it != plugins.end()) {
            return it->second();
        }
        return nullptr;
    }

private:
    std::map<std::string, std::function<std::unique_ptr<IPlugin>()>> plugins;
};

// 사용 예
PluginManager manager;
manager.registerPlugin<MyPlugin>("MyPlugin");
auto plugin = manager.createPlugin("MyPlugin");
  

이렇게 하면 프로그램 실행 중에 새로운 기능을 동적으로 추가할 수 있어. 게임 모드나 그래픽 필터 같은 걸 만들 때 완전 유용하겠지? 🎮

5. 설정 파일 파싱

설정 파일을 파싱하는 것도 리플렉션으로 쉽게 할 수 있어. JSON이나 XML 같은 형식의 설정 파일을 객체로 자 동으로 변환할 수 있지.


// 미래의 C++ 코드 (아직 구현되지 않음)
template<typename T>
T parseConfig(const json& config) {
    T result;
    constexpr {
        for (const auto& member : std::reflect(T).members()) {
            if (config.contains(member.name())) {
                result.*member = config[member.name()].get<decltype(result.*member)>();
            }
        }
    }
    return result;
}

// 사용 예
struct AppConfig {
    std::string appName;
    int maxConnections;
    bool debugMode;
};

json configJson = {
    {"appName", "MyApp"},
    {"maxConnections", 100},
    {"debugMode", true}
};

AppConfig config = parseConfig<AppConfig>(configJson);
  

이렇게 하면 설정 파일의 내용을 자동으로 객체에 매핑할 수 있어. 설정 항목이 추가되거나 변경되어도 코드를 수정할 필요가 없지. 완전 편하지 않아? 😄

재능넷 팁: 리플렉션을 활용한 프로젝트를 만들어보는 것은 어떨까? 재능넷에서 관련 프로젝트를 찾아보거나, 직접 프로젝트를 제안해볼 수 있어. 실제 경험만큼 좋은 학습법은 없으니까!

6. GUI 프레임워크

GUI 프레임워크에서도 리플렉션은 아주 유용해. 속성 바인딩이나 데이터 모델과 뷰의 자동 연결 같은 기능을 구현할 때 리플렉션을 사용할 수 있거든.


// 미래의 C++ 코드 (아직 구현되지 않음)
template<typename T>
void bindToGUI(T& obj, GUI& gui) {
    constexpr {
        for (const auto& member : std::reflect(T).members()) {
            gui.addControl(member.name(), &(obj.*member));
        }
    }
}

// 사용 예
struct Person {
    std::string name;
    int age;
};

Person p;
GUI gui;
bindToGUI(p, gui);
  

이렇게 하면 객체의 모든 멤버에 대해 자동으로 GUI 컨트롤이 생성돼. 객체 구조가 변경되어도 GUI 코드를 수정할 필요가 없어지는 거지. 완전 꿀이야! 🍯

7. 메타프로그래밍

리플렉션은 메타프로그래밍을 더욱 강력하게 만들어줘. 컴파일 타임에 코드를 생성하거나 최적화하는 데 사용할 수 있지.


// 미래의 C++ 코드 (아직 구현되지 않음)
template<typename T>
constexpr auto generateHash() {
    std::size_t hash = 0;
    constexpr {
        for (const auto& member : std::reflect(T).members()) {
            hash ^= std::hash<std::string>{}(member.name());
        }
    }
    return hash;
}

// 사용 예
struct MyStruct {
    int a;
    std::string b;
    double c;
};

constexpr auto hash = generateHash<MyStruct>();
  

이 코드는 컴파일 타임에 구조체의 해시값을 계산해. 이런 식으로 타입 정보를 이용해 컴파일 타임에 다양한 작업을 수행할 수 있어. 성능에도 좋고, 코드도 간결해지지! 👍

자, 여기까지가 리플렉션의 실제 응용 사례들이야. 정말 다양한 분야에서 활용될 수 있다는 걸 알겠지? 리플렉션은 마치 프로그래밍 세계의 만능 도구 같아. 이걸 잘 활용하면 정말 강력한 프로그램을 만들 수 있을 거야.

하지만 기억해야 할 게 있어. 리플렉션은 강력한 도구지만, 남용하면 코드가 복잡해지고 성능이 저하될 수 있어. 항상 적절한 상황에서 적절하게 사용하는 게 중요해.

그리고 C++에서 이런 고급 기능을 사용하려면 깊이 있는 이해가 필요해. 재능넷(https://www.jaenung.net)에서 관련 강의를 들어보는 것도 좋은 방법이 될 거야. 실제 프로젝트에 참여해보면서 경험을 쌓는 것도 중요하고.

자, 이제 C++ 리플렉션의 현재와 미래, 그리고 실제 응용까지 모두 알아봤어. 어때, 흥미진진하지 않아? C++의 미래는 정말 밝아 보여. 우리가 이 여정의 일부가 될 수 있다는 게 얼마나 신나는 일이야! 🚀

끝으로, 프로그래밍은 계속 발전하는 분야야. 새로운 기술과 개념을 배우는 걸 두려워하지 마. 오히려 즐기면서 배워나가자고. 그게 바로 진정한 개발자의 자세니까! 화이팅! 💪

관련 키워드

  • C++
  • 리플렉션
  • 메타프로그래밍
  • 스태틱 리플렉션
  • 메타클래스
  • 직렬화
  • ORM
  • 단위 테스트
  • 플러그인 시스템
  • GUI 프레임워크

지식의 가치와 지적 재산권 보호

자유 결제 서비스

'지식인의 숲'은 "이용자 자유 결제 서비스"를 통해 지식의 가치를 공유합니다. 콘텐츠를 경험하신 후, 아래 안내에 따라 자유롭게 결제해 주세요.

자유 결제 : 국민은행 420401-04-167940 (주)재능넷
결제금액: 귀하가 받은 가치만큼 자유롭게 결정해 주세요
결제기간: 기한 없이 언제든 편한 시기에 결제 가능합니다

지적 재산권 보호 고지

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

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

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

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

 주문전 꼭 쪽지로 문의메세지 주시면 감사하겠습니다.* Skills (order by experience desc)Platform : Android, Web, Hybrid(Cordova), Wind...

------------------------------------만들고 싶어하는 앱을 제작해드립니다.------------------------------------1. 안드로이드 ( 자바 )* 블루...

 운영하는 사이트 주소가 있다면 사이트를 안드로이드 앱으로 만들어 드립니다.기본 5000원은 아무런 기능이 없고 단순히 html 페이지를 로딩...

📚 생성된 총 지식 8,645 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 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 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창