inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이야기를 나눠요

173만명의 커뮤니티!! 함께 토론해봐요.

저도 염치없지만 수강연장 가능할까요..

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

사는게 바빠서 공부못하고 신경못쓰다가 수강기간이 4월 말까지인걸 알아버렸습니다.. 혹시 6월말까지만 수강기간 연장 가능할까요?? 이번 6월에 있을 실기 시험 꼭 붙고 싶습니다. 답변은 이메일로 주시나요?? 제 이메일은 kimtgnm@naver.com 입니다.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
했빵 댓글 1 좋아요 0 조회수 335

강의 연장 문의 드립니다.

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

강의가 2025년 6월 4일까지인데 10회 실기를 보기 위해서 2025년 6월 20일까지 연장 가능할지 부탁드립니다.. 열심히 들어서 합격하겠습니다 dbwlsdl5796@naver.com입니다.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
dbwlsdl5796 댓글 1 좋아요 0 조회수 301

원핫 인코딩

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

exam1 = pd.get_dummies(exam1, columns=['race'], drop_first=True) exam1 = pd.get_dummies(exam1['race'], drop_first=True) 랑 차이가 있나요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김치현 댓글 1 좋아요 0 조회수 352

Linearregression error

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

(사진)

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
심나 댓글 1 좋아요 0 조회수 276

Xgbboost 결과가 다르게 나와요

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

(사진)

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
심나 댓글 1 좋아요 0 조회수 206

랜덤포레스트 결과가 다르게 나와요

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

랜덤포레스트 결과가 다르게 나와 요

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
심나 댓글 1 좋아요 0 조회수 247

사후 검정 투키, 본페로니 식

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

사후 검정 투키, 본페로니 식 외워야 하나요? 시험에서 사후검정도 해야하나요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
wsyang 댓글 1 좋아요 0 조회수 364

공부방법 질의드립니다.

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

정처기 실기 준비한다고 빅분기 실기 준비가 늦었는데요.... 인강 결제하고 공부한지 3일차인데, 작업형1 모의문제를 푸는데 멘탈이 탈탈 털려버렸어요 ㅜㅜ... 나름 열심히한다고 온갖 함수부터 달달 외우고는 있는데 응용이 전혀 되질 않아서 모의문제를 혼자 힘으로 1도 못풀었어요.. 계속 gpt로 코드 해석보면서 보고있는데, 이대로 계속 진도를 나가는게 맞는지 모르겠네요... 계속 지웠다 썼다 반복하고는 있는데, 단순히 답을 외우게 되는 것 같아서 나중에 응용이 될까 모르겠네요.. 이해가 안 가더라도 계속 진도를 나가고 회독을 하는게 맞는 건가요 ?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
rokkk 댓글 1 좋아요 1 조회수 276

작업형2 성별예측 문제

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

https://dataq.goorm.io/exam/116674/체험하기/quiz/4 여기서 하는 성별예측 문제에서 import pandas as pd train = pd.read _csv("data/customer_train.csv") test = pd.read _csv("data/customer_test.csv") # print(train.shape, test.shape) # print( train.info ()) # print(train.isnull().sum()) # print(test.isnull().sum()) #결측치 처리 (환불금액) train['환불금액'] = train['환불금액'].fillna(0) test['환불금액'] = test['환불금액'].fillna(0) # print(test.isnull().sum()) # print(train['성별'].value_counts()) #인코딩 target = train.pop('성별') train = pd.get_dummies(train) test = pd.get_dummies(test) #검증 데이터 분리 from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0) # print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape) from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(random_state=0) rf.fit (X_tr, y_tr) pred = rf.predict_proba(X_val) # print(pred) from sklearn.metrics import roc_auc_score roc = roc_auc_score(y_val, pred[:,1]) #예측 및 파일생성 pred = rf.predict_proba(test) submit = pd.DataFrame({ "pred":pred[:,1] }) submit.to _csv("result.csv", index=False) # print( pd.read _csv("result.csv")) 이렇게 코딩을 했는데 예측 및 파일 생성에서 pred = rf.predict_proba(test) 여기 부분이 오류가 뜨는데 왜 그런가요 ㅠㅠ > Makefile:6: recipe for target 'py3_run' failed make: *** [py3_run] Error 1 Traceback (most recent call last): File "/goorm/Main.out", line 43, in <module> pred = rf.predict_proba(test) File "/usr/local/lib/python3.9/dist-packages/sklearn/ensemble/_forest.py", line 674, in predict_proba X = self._validate_X_predict(X) File "/usr/local/lib/python3.9/dist-packages/sklearn/ensemble/_forest.py", line 422, in validate X_predict return self.estimators_[0]._validate_X_predict(X, check_input=True) File "/usr/local/lib/python3.9/dist-packages/sklearn/tree/_classes.py", line 407, in validate X_predict X = self._validate_data(X, dtype=DTYPE, accept_sparse="csr", File "/usr/local/lib/python3.9/dist-packages/sklearn/base.py", line 437, in validate data self._check_n_features(X, reset=reset) File "/usr/local/lib/python3.9/dist-packages/sklearn/base.py", line 365, in check n_features raise ValueError( ValueError: X has 73 features, but DecisionTreeClassifier is expecting 74 features as input. 이렇게 뜹니다,,

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
wnguswls2818 댓글 1 좋아요 0 조회수 250

문제2

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요. 좋은 강의 감사드립니다. 덕분에 잘 배우고 있습니다. 문제 2. 주어진 데이터에서 결측치가 30%이상 되는 컬럼을 찾고 해당 컬럼에 결측치가 있는 데이터(행)를 삭제 함. 그리고 30% 미만, 20% 이상인 결측치가 있는 컬럼은 최빈값으로 값을 대체하고 'f3'컬럼의 'gold' 값을 가진 데이터 수를 출력하세요! 문제2를 대하고 순간 다음과 같은 고민을 했었습니다. 1번을 수행하여 'f1'컬럼의 결측치 행을 삭제한 후 2번을 하려니 'f3'컬럼의 결측치 갯수가 18개만 남더군요. 그럼 18개는 최초 데이터 100개의 20% 미만일까? 그렇지 않다. 'f1'컬럼 결측치를 제거한 후 데이터 갯수 69개의 20%~30%(14~20)에 해당한다. 그렇다면 'f3'컬럼의 최빈 값은 'f1'컬럼의 결측치를 제거하기 전의 값을 사용해야할까 아니면 결측치 제거 후의 값을 사용해야 할까? 결과적으로는 어떤 방식으로 하던 답은 56으로 일치했지만 주어진 데이터에 따라 다른 값이 나올 수도 있을 것 같습니다. 혼돈을 없애기 위해 문제 2의 문항 순서를 바꾸면 어떨까요? 30% 미만, 20% 이상인 결측치가 있는 컬럼은 최빈값으로 값을 대체하고 주어진 데이터에서 결측치가 30%이상 되는 컬럼을 찾고 해당 컬럼에 결측치가 있는 데이터(행)를 삭제 함. 'f3'컬럼의 'gold' 값을 가진 데이터 수를 출력하세요!

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김우현 댓글 1 좋아요 1 조회수 320

[1유형]

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요. 1유형은 부분점수가 있다고 하는데 값을 출력하고 그 때마다 제출 버튼을 눌러야지 채점이 되는건가요? 1유형에도 문제가 3개 있으면 제출 버튼을 3번 누르면 되는 건가요? 2유형은 마지막에 파일 생성하면 끝이 나는 건가요? 3유형도 궁금합니다!!

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
tlsdk0284 댓글 0 좋아요 0 조회수 297

맥북으로 공부

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요 강사님 올해 말 실기 시험 목표로 강의를 수강 중인 학생입니다. 강의 수강 중 문득 걱정이 되는게 있어서 문의 드립니다. 맥북 단축키 같은것도 알려주시고 당장 수강하는데는 별 문제없다고 생각하는데, 시험장에 맥북을 들고 갈 순 없는 노릇이니.. 혹시 맥북으로 공부해 갔을때 발생할 수 있는 문제와 그에 대처방법이 혹시 있을까요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
udinotti 댓글 1 좋아요 0 조회수 374

강의 연장

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요 강의 수강생인데요 ㅠ 이번 실기 치르는데 제가 작년부터 강의를 결제해서 듣고 있어서요 혹시 다음주까지 연장할 수 있는 기능이나 방법이 있을까요 ?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
안서은 댓글 1 좋아요 0 조회수 368

계속 진도를 빼는 게 맞을까요? 나을까요?

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요 비전공자 직장인입니다. 퇴근후 딴짓 님 강의를 열심히 듣고 있습니다. 현재 작업형2 모의문제 2를 혼자서 풀고 있는데, 단순한 결측치 찾고, 샘플 찾고, 그런 것들은 하겠는데 이거를 모델링 하는 거에서부터 사실 멘붕입니다. 작업형1 모의문제를 풀 때도 똑같이 강의를 듣던것보다 더 어려워서 멘붕이 왔었습니다. 일단은 모르겠는 부분은 인지한 상태로 다시 반복하겠다는 의지로 계속 강의를 듣는 게 맞겠죠? 반복이 답이겠죠??

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
뚜디니 댓글 3 좋아요 1 조회수 349

강의 듣고

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

강의를 한번 쭉 듣고나서는 이 강의 기출을 반복하면되나요??? 합격하신 분들은 이 강의만 반복적으로 돌려서 합격하셨다는건지 아님 얼른 듣고 추가적으로 더 무엇을 했다는것인지 무엇을 해야하는지 궁금합니다.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
joy10780 댓글 1 좋아요 0 조회수 289

꼭 암기해야하는 코드나 파트...

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

선생님, 강의 열심히 보고 있는데 제가 5월 중순부터 시작하면서 조금 일찍 시작했는데도 불구하고 암기 할 게 너~~~~~~무 많아서 큰일입니다 ㅠㅠ 단권화 시키려고 실기용 교재를 샀는데 정말 정말 이것만큼은 꼭! 외우고 가야하는 코드나 문법같은거를 정리해주실 수 있나요? (강의나...파일로) 사실 고득점 합격은 바라지도 않고 60점 턱걸이로라도 너무 붙고싶습니다!

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
moonwrd 댓글 2 좋아요 0 조회수 410

이번 실기일까지 강의를 듣고 싶어요.

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

삭제된 글입니다

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
찰스 댓글 1 좋아요 0 조회수 286

빠르게 코딩하기 위한 단축기 문의 (팁)

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

삭제된 글입니다

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
hello4298 댓글 1 좋아요 0 조회수 444

프로토콜 버퍼 자동 변환기 툴 배포합니다!

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

수업시간에 구글 프로토콜 버퍼를 이용하여 프로토콜 패킷을 생성하는데, 클라이언트와 서버단에서 PacketHandler에는 함수를 직접 정의해서 생성해야합니다. 이 과정이 꽤 번거롭고 이름도 정확하게 맞춰야합니다. 그래서 자동 툴을 이용하여 작성해야 할 코드를 자동으로 정확하게 생성해주는 툴을 제작하여 배포합니다. 이 기능의 배포는 여기에서만 합니다. 이 기능은 UnityEditor Tools를 구현하여 이용하는 방식입니다. [여기를 클릭하여 다운로드] 스크립트를 다운로드합니다. (또는 아래 스크립트를 복사하여 작성) 유니티 에디터 Assets 폴더 안에 넣습니다. 위치는 상관 없습니다. 유니티 에디터 상단 바에서 Tools/Bonnate/Socket/Generate Protocol Code From Enum을 선택합니다. 프로토콜 버퍼 에디터에서 MsgId에 프로토콜 이름을 복사합니다. 주석을 지원합니다. /* 주석은 구분 없이 모든곳에 동일하게 생성됩니다. // 주석은 프로토콜의 주석으로 생성됩니다. 본 글에서는 아래 이미지와 같이 복사하였습니다. 복사한 값 Enum 스니펫을 Tools 윈도우 창에 붙여넣기합니다. 우측의 변환 버튼을 클릭합니다. 생성된 값을 각 스크립트에 붙여넣기합니다. 변환된 프로토콜 코드는 프로토콜버퍼 에디터 구현부에 붙여넣으세요. 서버가 보내는 프로토콜은 클라이언트단(유니티)에서 사용합니다. 클라이언트에서 보내는 프로토콜은 서버단에서 사용합니다. 전체 코드입니다. 위에서 다운로드 받은 파일과 동일합니다. /* * GenerateProtocolCodeFromEnum - Enum을 이용한 프로토콜 코드 생성을 위한 유니티 에디터 창 * 작성자: [Bonnate] https://bonnate.tistory.com/ * 라이선스: 없음 (명시적인 라이선스 없이 제공됨) * * 설명: * 이 스크립트는 Enum 스니펫에서 프로토콜 코드, 클라이언트 핸들러 코드, 서버 핸들러 코드를 생성하기 위한 유니티 에디터 창을 정의합니다. * 입력한 Enum 스니펫을 자동으로 프로토콜 코드로 변환하고, 해당하는 클라이언트와 서버 핸들러 함수를 생성합니다. * 생성된 코드는 클립보드에 복사하여 추가적인 사용이 가능합니다. * * 주의 사항: * 이 스크립트는 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] https://www.inflearn.com/roadmaps/355 * 의 기능을 이용하기 위해 작성된 스크립트입니다. * * 사용 방법: * 1. 이 스크립트를 유니티 프로젝트의 Editor 폴더에 첨부합니다. * 2. GenerateProtocolCodeFromEnum 창을 열기 위해 Tools -> Bonnate -> Socket -> Generate Protocol Code From Enum을 선택합니다. * 3. 입력 텍스트 영역에 Enum 코드 스니펫을 입력합니다. * 4. "변환" 버튼을 클릭하여 프로토콜 코드, 클라이언트 핸들러 코드, 서버 핸들러 코드를 생성합니다. * 5. 생성된 코드는 각각의 텍스트 영역에 표시됩니다. * 6. 해당 영역의 텍스트를 클립보드에 복사하려면 옆에 있는 버튼을 클릭합니다. * 7. 생성된 코드를 복사하여 각 코드에 붙여넣기하여 편리하게 프로토콜을 디자인합니다. * * 참고: 이 스크립트는 현재 상태로 제공되며 일부 제한 사항과 문제가 있을 수 있습니다. * 개인적으로 업데이트 되나, 온라인(깃허브 리포지트리 등)에 배포하지는 않을 예정입니다. */ #if UNITY_EDITOR using UnityEngine; using UnityEditor; using System.Text; using System.Text.RegularExpressions; public class GenerateProtocolCodeFromEnum : EditorWindow { private string mInputText = ""; private string mProtocolText = ""; private string mClientHandlerText = ""; private string mServerHandlerText = ""; private Vector2 mScrollPosition; [MenuItem("Tools/Bonnate/Socket/Generate Protocol Code From Enum")] public static void ShowWindow() { GetWindow<GenerateProtocolCodeFromEnum>("Generate Protocol Code From Enum"); } private void OnGUI() { mScrollPosition = EditorGUILayout.BeginScrollView(mScrollPosition, GUILayout.ExpandHeight(true)); // 입력 텍스트 영역 EditorGUILayout.BeginHorizontal(); GUILayout.Label("Enum 코드 스니펫 입력"); // 변환 버튼 if (GUILayout.Button("변환", GUILayout.Width(80))) { mInputText = RemoveCommonIndentation(mInputText); GenerateProtocol(); EditorGUIUtility.systemCopyBuffer = mProtocolText; // 변환된 텍스트를 클립보드에 복사 } EditorGUILayout.EndHorizontal(); mInputText = EditorGUILayout.TextArea(mInputText, GUILayout.ExpandHeight(true)); GUILayout.Space(30); // 프로토콜 코드 영역 EditorGUILayout.BeginHorizontal(); GUILayout.Label("변환된 프로토콜 코드"); // 복사 버튼 if (GUILayout.Button("복사", GUILayout.Width(80))) { EditorGUIUtility.systemCopyBuffer = mProtocolText; // 프로토콜 코드를 클립보드에 복사 } EditorGUILayout.EndHorizontal(); mProtocolText = EditorGUILayout.TextArea(mProtocolText, GUILayout.ExpandHeight(true)); GUILayout.Space(10); // 서버 핸들러 영역 EditorGUILayout.BeginHorizontal(); GUILayout.Label("서버가 보내는 프로토콜 (클라이언트단에서 구현)"); // 버튼 if (GUILayout.Button("복사", GUILayout.Width(80))) { EditorGUIUtility.systemCopyBuffer = mServerHandlerText; // 서버 핸들러 코드를 클립보드에 복사 } EditorGUILayout.EndHorizontal(); mServerHandlerText = EditorGUILayout.TextArea(mServerHandlerText, GUILayout.ExpandHeight(true)); GUILayout.Space(10); // 클라이언트 핸들러 영역 EditorGUILayout.BeginHorizontal(); GUILayout.Label("클라이언트가 보내는 프로토콜 (서버단에서 구현)"); // 버튼 if (GUILayout.Button("복사", GUILayout.Width(80))) { EditorGUIUtility.systemCopyBuffer = mClientHandlerText; // 클라이언트 핸들러 코드를 클립보드에 복사 } EditorGUILayout.EndHorizontal(); mClientHandlerText = EditorGUILayout.TextArea(mClientHandlerText, GUILayout.ExpandHeight(true)); EditorGUILayout.EndScrollView(); GUILayout.Space(20); GUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Powered by: Bonnate"); if (GUILayout.Button("Github", GetHyperlinkLabelStyle())) { OpenURL("https://github.com/bonnate"); } if (GUILayout.Button("Blog", GetHyperlinkLabelStyle())) { OpenURL("https://bonnate.tistory.com/"); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); EditorGUILayout.LabelField("이 기능은 인프런 강의의 기능을 편리하게 사용하기 위해 구현되었습니다."); if (GUILayout.Button("[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈]", GetHyperlinkLabelStyle())) { OpenURL("https://www.inflearn.com/roadmaps/355"); } GUILayout.EndHorizontal(); } private GUIStyle GetHyperlinkLabelStyle() { GUIStyle style = new GUIStyle(GUI.skin.label); style.normal.textColor = new Color(0f, 0.5f, 1f); style.stretchWidth = false; style.wordWrap = false; return style; } private void OpenURL(string url) { EditorUtility.OpenWithDefaultApp(url); } private string RemoveCommonIndentation(string input) { string[] lines = input.Split('\n'); // 찾아낼 공백 패턴 Regex indentRegex = new Regex(@"^\s+"); // 최소 공통 공백 찾기 int maxIndentLength = 0; foreach (string line in lines) { if (!string.IsNullOrWhiteSpace(line)) { Match match = indentRegex.Match(line); if (match.Success) { int indentLength = match.Length; if (indentLength > maxIndentLength) maxIndentLength = indentLength; } } } // 최소 공통 공백 제거 string output = ""; foreach (string line in lines) { if (line.Trim() == "") continue; if (!string.IsNullOrWhiteSpace(line)) { string trimmedLine = line.Substring(maxIndentLength); output += trimmedLine + "\n"; } } return output; } private void GenerateProtocol() { // 입력 텍스트를 줄 단위로 분할 string[] lines = mInputText.Split('\n'); // 생성된 코드 문자열 초기화 string generatedProtocolCode = ""; string generatedClientHandlerCode = ""; string generatedServerHandlerCode = ""; bool isMultiLineComment = false; bool isClientHandlerComment = false; bool isServerHandlerComment = false; for (int i = 0; i < lines.Length; ++i) { string line = lines[i]; // 다중 줄 주석 처리 if (line.Trim().StartsWith("/*")) { isMultiLineComment = true; } if (isMultiLineComment) { generatedProtocolCode += line + "\n"; generatedClientHandlerCode += line + "\n"; generatedServerHandlerCode += line + "\n"; // 다중 줄 주석 종료 if (line.Trim().EndsWith("*/")) { isMultiLineComment = false; } continue; } if (line == "\n") { generatedProtocolCode += "\n"; generatedClientHandlerCode += "\n"; generatedServerHandlerCode += "\n"; continue; } // 주석인 경우 처리하여 유지 if (line.Trim().StartsWith("//")) { StringBuilder funcComment = new StringBuilder(); for (; i < lines.Length; ++i) { line = lines[i]; if (!line.Trim().StartsWith("//")) { funcComment.Remove(funcComment.Length - 2, 2); --i; break; } funcComment.Append($"{line}\n"); } // 클라이언트 핸들러 주석 확인 if (i + 1 < lines.Length && lines[i + 1].Trim().StartsWith("C_")) { isClientHandlerComment = true; isServerHandlerComment = false; } // 서버 핸들러 주석 확인 else if (i + 1 < lines.Length && lines[i + 1].Trim().StartsWith("S_")) { isClientHandlerComment = false; isServerHandlerComment = true; } if (isClientHandlerComment) { generatedClientHandlerCode += funcComment + "\n"; } if (isServerHandlerComment) { generatedServerHandlerCode += funcComment + "\n"; } generatedProtocolCode += funcComment + "\n"; continue; } // 빈 줄이거나 등호 (=)가 없는 줄은 건너뜀 if (string.IsNullOrEmpty(line) || !line.Contains("=")) continue; // 줄에서 변수 이름과 값 추출 string[] parts = line.Split('='); string variableName = parts[0].Trim(); string variableValue = parts[1].Trim(); // 접두사 추출 및 나머지 이름을 카멜 표기법으로 변환 string[] nameParts = variableName.Split('_'); string prefix = nameParts[0]; string camelCaseName = ""; for (int j = 1; j < nameParts.Length; ++j) { camelCaseName += char.ToUpper(nameParts[j][0]) + nameParts[j].Substring(1).ToLower(); } // 새 프로토콜 메시지 생성 string protocolMessage = $"message {prefix}_{camelCaseName} {{\n}}"; // 생성된 프로토콜 메시지를 코드에 추가 generatedProtocolCode += protocolMessage + "\n"; // 클라이언트 핸들러 코드 생성 if (prefix.StartsWith('C')) { string clientHandlerCode = $"public static void {prefix}_{camelCaseName}Handler(PacketSession session, IMessage packet)\n{{\n {prefix}_{camelCaseName} {prefix.ToLower()}_{camelCaseName.ToLower()} = packet as {prefix}_{camelCaseName};\n // TODO\n}}\n"; generatedClientHandlerCode += clientHandlerCode + "\n"; } // 서버 핸들러 코드 생성 if (prefix.StartsWith('S')) { string serverHandlerCode = $"public static void {prefix}_{camelCaseName}Handler(PacketSession session, IMessage packet)\n{{\n {prefix}_{camelCaseName} {prefix.ToLower()}_{camelCaseName.ToLower()} = packet as {prefix}_{camelCaseName};\n // TODO\n}}\n"; generatedServerHandlerCode += serverHandlerCode + "\n"; } } // 생성된 코드를 입력 필드에 할당 mProtocolText = generatedProtocolCode; mClientHandlerText = generatedClientHandlerCode; mServerHandlerText = generatedServerHandlerCode; } } #endif

  • C#
  • unity
  • socket
  • packet
  • protocol
Bonnate 댓글 0 좋아요 1 조회수 850

인기 태그

인프런 TOP Writers

주간 인기글