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

🌲 지식인의 숲 🌲

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

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

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

소개안드로이드 기반 어플리케이션 개발 후 서비스를 하고 있으며 스타트업 경험을 통한 앱 및 서버, 관리자 페이지 개발 경험을 가지고 있습니다....

애플리케이션 서비스 안녕하세요. 안드로이드 개발자입니다.여러분들의 홈페이지,블로그,카페,모바일 등 손쉽게 어플로 제작 해드립니다.요즘...

C#의 확장 메서드 활용 팁

2024-09-27 19:06:42

재능넷
조회수 492 댓글수 0

🚀 C# 확장 메서드의 세계로 떠나볼까요? 🎢

 

 

안녕하세요, 코딩 덕후 여러분! 오늘은 C#의 숨은 보석 같은 기능, 바로 '확장 메서드'에 대해 깊이 파헤쳐 볼 거예요. 이 글을 다 읽고 나면 여러분도 확장 메서드 마스터가 될 수 있을 거예요! 😎

혹시 재능넷에서 C# 프로그래밍 강의를 들어보신 적 있나요? 없다고요? 그럼 이 글로 시작해보는 것도 좋겠네요! 자, 이제 본격적으로 시작해볼까요?

C# 확장 메서드 로고 C# 확장 메서드 코드의 확장, 무한한 가능성!

🤔 확장 메서드가 뭐길래?

자, 여러분! 확장 메서드가 뭔지 아세요? 모르셔도 괜찮아요. 지금부터 함께 알아가 볼 거니까요! 😉

확장 메서드는 C# 3.0부터 도입된 아주 쿨한 기능이에요. 이걸 사용하면 기존 클래스나 인터페이스를 수정하지 않고도 새로운 메서드를 추가할 수 있어요. 와! 대박이죠?

🎈 확장 메서드의 핵심 포인트:

  • 기존 코드 수정 없이 새 기능 추가 가능
  • static 클래스와 static 메서드로 구현
  • 첫 번째 매개변수에 this 키워드 사용

어때요? 벌써부터 흥미진진하지 않나요? 이제 본격적으로 확장 메서드의 세계로 들어가 볼까요? 🚪💨

🛠️ 확장 메서드 기본 문법

자, 이제 확장 메서드를 어떻게 만드는지 알아볼 차례예요. 기본 문법은 생각보다 간단해요!

public static class StringExtensions
{
    public static string Reverse(this string str)
    {
        return new string(str.ToCharArray().Reverse().ToArray());
    }
}

위의 코드를 보면, static 클래스 안에 static 메서드로 정의되어 있죠? 그리고 첫 번째 매개변수에 this 키워드가 붙어 있어요. 이게 바로 확장 메서드의 기본 형태예요!

💡 Pro Tip: 확장 메서드는 네임스페이스 안에 정의해야 해요. 그래야 다른 파일에서도 쉽게 사용할 수 있답니다!

이제 이 확장 메서드를 어떻게 사용하는지 볼까요?

string myString = "Hello, World!";
string reversed = myString.Reverse();
Console.WriteLine(reversed);  // 출력: !dlroW ,olleH

와! 정말 간단하죠? 마치 string 클래스에 원래부터 Reverse 메서드가 있었던 것처럼 사용할 수 있어요. 이게 바로 확장 메서드의 매력이에요! 😍

확장 메서드 기본 구조 static class static method this 키워드 확장할 타입 Magic! ✨

이제 기본적인 문법을 알았으니, 더 재미있는 예제들을 살펴볼까요? 🎉

🌈 다양한 확장 메서드 예제

자, 이제 확장 메서드로 무엇을 할 수 있는지 몇 가지 재미있는 예제를 통해 알아볼까요? 준비되셨나요? Let's go! 🚀

1. 문자열을 대문자로 변환하고 느낌표 추가하기

public static class StringExtensions
{
    public static string Shout(this string str)
    {
        return str.ToUpper() + "!!!";
    }
}

// 사용 예
string message = "hello world";
Console.WriteLine(message.Shout());  // 출력: HELLO WORLD!!!

와! 이제 모든 문자열이 소리 지를 수 있게 되었어요. 😆 재미있지 않나요?

2. 정수 배열에서 짝수만 필터링하기

public static class ArrayExtensions
{
    public static int[] GetEvenNumbers(this int[] numbers)
    {
        return numbers.Where(n => n % 2 == 0).ToArray();
    }
}

// 사용 예
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] evenNumbers = numbers.GetEvenNumbers();
Console.WriteLine(string.Join(", ", evenNumbers));  // 출력: 2, 4, 6, 8, 10

이제 배열에서 짝수만 쏙쏙 뽑아낼 수 있어요. 완전 편하죠? 👍

3. DateTime에 작업일 계산 기능 추가하기

public static class DateTimeExtensions
{
    public static DateTime AddWorkdays(this DateTime date, int days)
    {
        var newDate = date;
        while (days > 0)
        {
            newDate = newDate.AddDays(1);
            if (newDate.DayOfWeek != DayOfWeek.Saturday && newDate.DayOfWeek != DayOfWeek.Sunday)
            {
                days--;
            }
        }
        return newDate;
    }
}

// 사용 예
DateTime today = DateTime.Now;
DateTime futureWorkday = today.AddWorkdays(5);
Console.WriteLine($"5 작업일 후: {futureWorkday:yyyy-MM-dd}");

이제 주말을 제외한 작업일을 계산할 수 있어요. 프로젝트 마감일 계산이 한결 쉬워졌죠? 😎

🎭 Fun Fact: 확장 메서드를 사용하면 마치 기존 클래스에 새로운 슈퍼파워를 부여하는 것 같아요! 여러분도 이제 C# 슈퍼히어로가 된 기분이 들지 않나요?

확장 메서드의 다양한 활용 String Array DateTime 확장 메서드로 더 강력해진 타입들!

이렇게 다양한 타입에 확장 메서드를 적용할 수 있어요. 여러분의 상상력이 곧 한계랍니다! 🌠

🧠 확장 메서드의 장단점

자, 이제 확장 메서드가 얼마나 쿨한지 알게 되셨죠? 하지만 모든 것에는 장단점이 있듯이, 확장 메서드도 예외는 아니에요. 함께 살펴볼까요?

👍 장점

  • 코드 재사용성 향상: 기존 클래스를 수정하지 않고도 새로운 기능을 추가할 수 있어요.
  • 가독성 개선: 메서드 체이닝을 통해 더 읽기 쉬운 코드를 작성할 수 있어요.
  • 유연성 증가: 심지어 sealed 클래스나 외부 라이브러리의 클래스에도 메서드를 "추가"할 수 있어요.
  • 테스트 용이성: 기존 코드를 건드리지 않고 새 기능을 추가하므로, 테스트하기가 더 쉬워져요.

👎 단점

  • 남용 가능성: 너무 많은 확장 메서드를 사용하면 코드가 복잡해질 수 있어요.
  • 성능 이슈: 일반 인스턴스 메서드보다 약간의 성능 저하가 있을 수 있어요 (하지만 대부분의 경우 무시할 만한 수준이에요).
  • 디버깅의 어려움: IDE에서 확장 메서드를 찾기가 조금 더 어려울 수 있어요.
  • 네임스페이스 관리: 여러 네임스페이스에 확장 메서드가 있으면 관리가 복잡해질 수 있어요.

💡 Pro Tip: 확장 메서드를 사용할 때는 항상 "이게 정말 필요한가?"라고 자문해보세요. 남용은 금물이에요!

확장 메서드의 장단점 비교 장점 코드 재사용성 ⬆️ 가독성 개선 📖 유연성 증가 🤸 단점 남용 가능성 ⚠️ 성능 이슈 🐢 디버깅 어려움 🔍

이렇게 장단점을 알고 나면, 확장 메서드를 더 현명하게 사용할 수 있겠죠? 😉

🎯 확장 메서드 활용 팁

자, 이제 확장 메서드의 기본을 알았으니 실전에서 어떻게 활용하면 좋을지 몇 가지 꿀팁을 알려드릴게요! 🍯

1. LINQ와 함께 사용하기

LINQ(Language Integrated Query)와 확장 메서드는 찰떡궁합이에요. 실제로 LINQ의 많은 메서드들이 확장 메서드로 구현되어 있답니다.

public static class EnumerableExtensions
{
    public static IEnumerable<T> WhereNot<T>(this IEnumerable<T> source, Func<T, bool> predicate)
    {
        return source.Where(item => !predicate(item));
    }
}

// 사용 예
var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var notEven = numbers.WhereNot(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", notEven));  // 출력: 1, 3, 5, 7, 9

이렇게 하면 LINQ의 Where와 반대되는 동작을 하는 WhereNot 메서드를 만들 수 있어요. 완전 편리하죠? 😎

2. 체이닝(Chaining) 활용하기

확장 메서드의 강점 중 하나는 메서드 체이닝을 통해 코드를 더 읽기 쉽게 만들 수 있다는 거예요.

public static class StringExtensions
{
    public static string Trim(this string str, char charToTrim)
    {
        return str.Trim(charToTrim);
    }

    public static string Capitalize(this string str)
    {
        if (string.IsNullOrEmpty(str)) return str;
        return char.ToUpper(str[0]) + str.Substring(1);
    }
}

// 사용 예
string result = "  hello world  "
    .Trim()
    .Capitalize()
    .Replace("world", "C# developer");

Console.WriteLine(result);  // 출력: Hello C# developer

이렇게 하면 코드가 마치 영어 문장을 읽는 것처럼 자연스러워져요. 가독성이 확 좋아지죠? 👀

3. 제네릭 타입 확장하기

확장 메서드는 제네릭 타입에도 적용할 수 있어요. 이를 통해 더 유연한 코드를 작성할 수 있죠.

public static class GenericExtensions
{
    public static bool IsNull<T>(this T obj) where T : class
    {
        return obj == null;
    }

    public static T ThrowIfNull<T>(this T obj, string paramName) where T : class
    {
        if (obj.IsNull())
        {
            throw new ArgumentNullException(paramName);
        }
        return obj;
    }
}

// 사용 예
string name = null;
try
{
    name.ThrowIfNull(nameof(name));
}
catch (ArgumentNullException ex)
{
    Console.WriteLine($"예외 발생: {ex.Message}");
}

이렇게 하면 모든 참조 타입에 대해 null 체크를 쉽게 할 수 있어요. 코드의 안정성이 높아지겠죠? 💪

🎈 Fun Fact: 확장 메서드를 잘 활용하면, 마치 여러분이 C#의 언어 설계자가 된 것 같은 느낌이 들 거예요. "이 기능이 있으면 좋겠다!" 하고 생각한 걸 직접 구현할 수 있으니까요!

확장 메서드 활용 팁 LINQ Chaining Generics 확장 메서드의 파워를 극대화하세요!

이런 팁들을 활용하면 여러분의 코드가 한층 더 세련되고 강력해질 거예요. 어때요, 벌써부터 코드가 빛나는 것 같지 않나요? ✨

🚦 확장 메서드 사용 시 주의사항

자, 이제 확장 메서드의 매력에 푹 빠지셨겠지만, 잠깐만요! 🚨 확장 메서드를 사용할 때 주의해야 할 점들도 있어요. 함께 살펴볼까요?

1. 이름 충돌 조심하기

확장 메서드와 인스턴스 메서드의 이름이 같다면? 🤔 인스턴스 메서드가 우선순위를 가져요!

public class MyClass
{
    public void DoSomething()
    {
        Console.WriteLine("인스턴스 메서드");
    }
}

public static class MyClassExtensions
{
    public static void DoSomething(this MyClass obj)
    {
        Console.WriteLine("확장 메서드");
    }
}

// 사용 예
var obj = new MyClass();
obj.DoSomething();  // 출력: 인스턴스 메서드

어라? 확장 메서드가 호출되지 않았어요! 이런 상황을 피하려면 확장 메서드의 이름을 잘 지어야 해요. 예를 들어, DoSomethingExtended같은 이름을 사용하면 좋겠죠?

2. 남용하지 않기

확장 메서드가 너무 편하다고 모든 곳에 사용하면 안 돼요! 때로는 그냥 일반 메서드를 사용하는 게 더 명확할 수 있어요.

⚠️ 주의: 확장 메서드를 너무 많이 사용하면 코드의 흐름을 파악하기 어려워질 수 있어요. "적당히"가 핵심이에요!

3. 성능 고려하기

확장 메서드는 일반 정적 메서드보다 약간의 성능 저하가 있을 수 있어요. 대부분의 경우 무시할 만한 수준이지만, 성능이 중요한 상황에서는 고려해야 해요.

// 성능 테스트 예제
public static class PerformanceTest
{
    public static void NormalMethod(int number)
    {
        // 일반적인 작업
    }

    public static void ExtensionMethod(this int number)
    {
        // 동일한 작업
    }
}

// 성능 비교
var stopwatch = new Stopwatch();

stopwatch.Start();
for (int i = 0; i < 1000000; i++)
{
    PerformanceTest.NormalMethod(i);
}
stopwatch.Stop();
Console.WriteLine($"일반 메서드: {stopwatch.ElapsedMilliseconds}ms");

stopwatch.Restart();
for (int i = 0; i < 1000000; i++)
{
    i.ExtensionMethod();
}
stopwatch.Stop();
Console.WriteLine($"확장 메서드: {stopwatch.ElapsedMilliseconds}ms");

실행해보면 확장 메서드가 약간 더 느린 걸 확인할 수 있어요. 하지만 대부분의 경우 이 차이는 무시할 만해요. 그래도 알고 있으면 좋겠죠? 😉

4. 테스트 고려하기

확장 메서드는 테스트하기 쉽지만, 때로는 테스트 코드가 복잡해질 수 있어요. 특히 여러 확장 메서드를 체이닝해서 사용할 때 주의가 필요해요.

// 테스트 예제
[TestClass]
public class StringExtensionsTests
{
    [TestMethod]
    public void Capitalize_ShouldCapitalizeFirstLetter()
    {
        // Arrange
        string input = "hello";

        // Act
        string result = input.Capitalize();

        // Assert
        Assert.AreEqual("Hello", result);
    }

    [TestMethod]
    public void Capitalize_ShouldHandleEmptyString()
    {
        // Arrange
        string input = "";

        // Act
        string result = input.Capitalize();

        // Assert
        Assert.AreEqual("", result);
    }
}

이렇게 각각의 확장 메서드에 대해 단위 테스트를 작성하면 좋아요. 하지만 여러 확장 메서드를 조합해서 사용할 때는 통합 테스트도 필요할 수 있어요.

확장 메서드 사용 시 주의사항 이름 충돌 남용 주의 성능 고려 테스트 고려 주의해서 사용하면 더 강력해집니다!

이런 주의사항들을 잘 기억하고 있으면, 확장 메서드를 더욱 효과적으로 사용할 수 있을 거예요. 자, 이제 확장 메서드의 진정한 마스터가 되셨네요! 👏

🎓 확장 메서드 실전 프로젝트

자, 이제 우리가 배운 모든 것을 종합해서 실제 프로젝트에 적용해볼 시간이에요! 🚀 간단한 TODO 리스트 관리 프로그램을 만들어볼까요?

프로젝트 구조


TodoApp/
├── Models/
│   └── TodoItem.cs
├── Extensions/
│   └── TodoExtensions.cs
└── Program.cs

1. TodoItem 클래스 정의

// TodoItem.cs
public class TodoItem
{
    public int Id { get; set; }
    public string Title { get; set; }
    public bool IsCompleted { get; set; }
    public DateTime CreatedAt { get; set; }
}

2. 확장 메서드 정의

// TodoExtensions.cs
using System;
using System.Collections.Generic;
using System.Linq;

public static class TodoExtensions
{
    public static IEnumerable<TodoItem> GetIncomplete(this IEnumerable<TodoItem> items)
    {
        return items.Where(item => !item.IsCompleted);
    }

    public static IEnumerable<TodoItem> GetOverdue(this IEnumerable<TodoItem> items, DateTime currentDate)
    {
        return items.Where(item => !item.IsCompleted && item.CreatedAt.Date < currentDate.Date);
    }

    public static string ToFormattedString(this TodoItem item)
    {
        return $"{item.Id}. [{(item.IsCompleted ? "X" : " ")}] {item.Title} (생성: {item.CreatedAt:yyyy-MM-dd})";
    }

    public static void PrintTodos(this IEnumerable<TodoItem> items)
    {
        foreach (var item in items)
        {
            Console.WriteLine(item.ToFormattedString());
        }
    }
}

3. 메인 프로그램

// Program.cs
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        var todos = new List<TodoItem>
        {
            new TodoItem { Id = 1, Title = "C# 공부하기", IsCompleted = false, CreatedAt = DateTime.Now.AddDays(-2) },
            new TodoItem { Id = 2, Title = "운동가기", IsCompleted = true, CreatedAt = DateTime.Now.AddDays(-1) },
            new TodoItem { Id = 3, Title = "장보기", IsCompleted = false, CreatedAt = DateTime.Now }
        };

        Console.WriteLine("모든 할 일:");
        todos.PrintTodos();

        Console.WriteLine("\n미완료 할 일:");
        todos.GetIncomplete().PrintTodos();

        Console.WriteLine("\n기한 지난 할 일:");
        todos.GetOverdue(DateTime.Now).PrintTodos();
    }
}

이 프로젝트에서 우리는 다음과 같은 확장 메서드들을 사용했어요:

  • GetIncomplete(): 미완료 항목만 필터링
  • GetOverdue(): 기한이 지난 항목 필터링
  • ToFormattedString(): TodoItem을 보기 좋게 문자열로 변환
  • PrintTodos(): TodoItem 목록을 콘솔에 출력

이렇게 확장 메서드를 사용하면 코드가 훨씬 더 읽기 쉽고 관리하기 좋아져요. 또한 필요한 기능을 쉽게 추가할 수 있죠!

💡 Pro Tip: 이 프로젝트를 더 발전시켜볼 수 있어요. 예를 들어, 할 일 추가, 삭제, 완료 표시 등의 기능을 추가해보는 건 어떨까요? 확장 메서드를 활용해 이러한 기능들을 구현해보세요!

TODO 앱 구조 TODO App Models TodoItem Extensions GetIncomplete() GetOverdue() 확장 메서드로 더 강력해진 TODO 앱!

이렇게 실제 프로젝트에 확장 메서드를 적용해보니 어떤가요? 코드가 훨씬 더 구조화되고 읽기 쉬워졌죠? 이제 여러분도 확장 메서드의 진정한 힘을 느끼셨을 거예요! 🎉

🏁 마무리

자, 여러분! 긴 여정이었지만 드디어 C# 확장 메서드의 모든 것을 알아봤어요. 어떠셨나요? 🤔

우리는 확장 메서드의 기본 개념부터 시작해서 실제 프로젝트에 적용하는 방법까지 살펴봤어요. 이제 여러분은:

  • 확장 메서드가 무엇인지 알게 되었고 ✅
  • 어떻게 만들고 사용하는지 배웠으며 ✅
  • 장단점을 이해하고 ✅
  • 실제 프로젝트에 적용할 수 있게 되었죠! ✅

확장 메서드는 C#의 강력한 기능 중 하나예요. 잘 사용하면 코드를 더 읽기 쉽고, 유지보수하기 좋게 만들 수 있어요. 하지만 남용하지 않도록 주의해야 한다는 것도 잊지 마세요!

🌟 Remember: 프로그래밍은 단순히 코드를 작성하는 것이 아니라, 문제를 해결하는 거예요. 확장 메서드는 그 과정을 더 쉽고 효율적으로 만들어주는 도구일 뿐이에요. 항상 "이 방법이 최선일까?"라고 자문해보세요!

이제 여러분은 C# 확장 메서드의 달인이 되었어요! 🏆 이 지식을 활용해 더 멋진 프로그램을 만들어보세요. 그리고 기억하세요, 연습이 완벽을 만듭니다. 계속해서 코딩하고, 실험하고, 배우세요!

다음에 또 다른 흥미진진한 C# 주제로 만나요. 그때까지 해피 코딩! 😊👨‍💻👩‍💻

C# 확장 메서드 마스터 Congratulations! You are now a C# Extension Methods Master! 🏆 🚀

관련 키워드

  • C#
  • 확장 메서드
  • LINQ
  • 메서드 체이닝
  • 제네릭
  • 코드 재사용성
  • 가독성
  • 유연성
  • 성능 최적화
  • 단위 테스트

지적 재산권 보호

지적 재산권 보호 고지

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

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

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

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

IOS/Android/Win64/32(MFC)/MacOS 어플 제작해드립니다.제공된 앱의 화면은 아이폰,아이패드,안드로이드 모두  정확하게 일치합니...

 안녕하세요 현재 안드로이드 기반 어플리케이션 제작 및 서비스를 하고 있으며,스타트업회사에 재직중입니다.- 개인앱, 프로젝트용 앱 등부...

웹 & 안드로이드 5년차입니다. 프로젝트 소스 + 프로젝트 소스 주석 +  퍼포먼스 설명 및 로직 설명 +  보이스톡 강의 + 실시간 피...

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

📚 생성된 총 지식 10,308 개

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