Microsoft MVP성태의 닷넷 이야기
기타: 42. 클래스 설명 [링크 복사], [링크+제목 복사]
조회: 11794
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

클래스 설명

제가 썼던 책에서 클래스가 잘 이해가 되지 않는다는 질문이 있어서,

기본 질문, 클래스가 뭐죠 ?
; https://www.sysnet.pe.kr/3/0/1217

간단히 답하려 했지만, 쓰다 보니 이야기가 길어져 아예 독립적인 글로 쓰게 되었습니다. ^^




클래스가 무엇인지 이해하는데는 클래스가 없는 경우를 생각해 보면 쉽습니다. 클래스가 없고 함수 정의만 지원된다면 어떻게 프로그램이 될까요? 예를 들어, 로그를 남기는 프로그램을 하나 만들어 보겠습니다. 일단 디스크에 파일로 남기는 작업을 정의하면,

void LogToDisk() { }

함수의 이름부터 벌써 로그를 남긴다는 것에 대한 의미를 두고 지어야 합니다. 이 상태에서 네트워크 및 화면에 로그를 남기는 기능도 추가해 보면 상황이 좀 더 명확하게 드러납니다.

void LogToDisk() { }
void LogToNetwork() { }
void LogToScreen() { }

실제로 클래스가 지원되지 않던 C언어에서는 저런 식으로 정의를 했었습니다.

C++에서는 그럼 어떻게 바뀔까요? class라는 것을 정의해 하나의 "구심점"을 만들어 사용할 수 있습니다.

class Log
{
    void ToDisk() { }
    void ToNetwork() { }
    void ToScreen() { }
};

어떠세요? 관리하기가 좀 편해진 것 같지 않나요? LogToDisk, LogToNetwork, LogToScreen 함수를 기억하라고 하는 것보다는 Log 클래스 하나만 기억하고 나머지 기능은 그 내부에 있다고 인식시키는 것이 더 직관적입니다.

아직 이것이 충분히 효용성이 없다고 판단되면 여기에 "데이터"를 추가해봐야겠군요. ^^

로그를 기록하기 위해 파일, 네트워크, 화면에 대한 핸들을 C 언어에서는 다음과 같이 정의해야 합니다.

void *pFile;
void *pNetwork;
void *pScreen;

void WriteTextToDisk() { }
void WriteTextToNetwork() { }
void WriteTextToScreen() { }

이렇게 정의하면 pFile, pNetwork, pScreen 변수는 해당 소스코드에 포함된 모든 코드에서 접근이 가능합니다. 게다가 어느 변수가 어디에서 사용되는지 제대로 된 '구심점'이 파악되지 않습니다. 어쨌든 파일의 모든 코드에서 사용하는 것입니다. 심지어 C언어의 경우 extern 예약어를 추가하면 해당 소스코드 뿐만 아니라 프로젝트에 포함된 모든 소스코드의 함수에서 접근하는 것이 가능합니다. 이렇게 되면 개발자들의 머릿속은 혼돈속에 헤매게 됩니다.

하지만 클래스를 이용하면 이런 문제가 간단하게 해결됩니다.

class Log
{
private:
    void *pFile;
    void *pNetwork;
    void *pScreen;
	
public:
    void ToDisk() { }
    void ToNetwork() { }
    void ToScreen() { }
};

이렇게 정의하면 pFile, pNetwork, pScreen 변수는 외부 코드에서 접근하는 것이 불가능합니다. 오로지 Log 클래스 내에 정의된 메서드에서만 접근이 됩니다. 즉, 데이터를 보호할 수 있기 때문에 클래스만 제대로 정의해 놓는다면 전체적인 프로그램의 기능 조립이 한결 쉬워집니다.




책에서도 썼지만 클래스는 예약어일 뿐 엄밀히 OOP(Object Oriented Programming) 개념으로 봤을 때 타입(Type)이 더 직관적인 단어입니다.

타입은 말 그대로 '형(식)'이죠. 개발자들이 흔히 알고 있는 타입이라면 int, double 등이 있습니다. 그런데 그렇게 형식이 개발 언어에 의해 정해져 버리면 표현의 자유가 없어집니다. 좀 더 '사람의 사고 방식'에 맞는 프로그래밍이 가능해지려면 개발 언어에서 자유롭게 '형'을 정의할 수 있도록 하는 것이 좋습니다.

그래서 나온 대표적인 예약어가 'class'입니다. 아마도 'type'이라는 예약어는 그리 직관적이지 않았나 봅니다. 클래스(또는 형식)을 마음대로 정의할 수 있게 해주는 언어들에는 C++, Java, C# 등이 있습니다.

실제로 OO(Object Oriented)적인 사고방식에 익숙한 사람의 뇌에 형식 정의가 자유로운 OOP 언어들은 좀 더 쉽게 프로그램을 개발할 수 있게 도와줍니다.

예를 들어, 쇼핑몰 사이트를 개발한다면 다음과 같이 대표적인 클래스들을 정의해 놓고 그것들을 조합해 전체 프로그램을 완성할 수 있게 됩니다.

class Product { }
class Consumer { }
class Producer { }

이렇게 클래스는 현실 세계의(사람의 두뇌에서 생각되는 직관적인) 형식을 프로그램 코드로 대응할 수 있게 도와줍니다.

그럼, '인스턴스(instance)'는 또 뭘까요?

"사람"이라는 클래스를 정의해 보면,

class Person
{
}

그 사람이라는 클래스로 찍혀져 나온 개체 하나하나가 인스턴스가 되는 것입니다. 즉, '영희', '철이'와 같은 개체(object)들은 '사람'이라는 클래스에 속한 인스턴스인 것입니다.

혹시 이 정도면 설명이 되었을까요? 사실 이것도 설명만 다를 뿐 책에 모두 있습니다. ^^




이 정도로 클래스에 대한 설명을 마치고 "기본 질문, 클래스가 뭐죠 ?" 글에 나온 다른 질문에 대해 하나씩 답을 달아 보겠습니다.

질문: VBA만으로는 좀 부족할 것 같은 아쉬움에, 솔직히 좀 짜증도 납니다.
VBA로는 한 줄이면 되는 간결한 작동 코드가.. 
씨샵 ? 닷넷? 언어로는 열줄은 뭐 가볍게 넘어가더군요..
이게 발전이야 ? 어이구, 아무런 개념도 없는 사람에게.. 
이게 무슨 날벼락이야..

일단, 공식적으로 Office 2013에서도 여전히 VBA가 지원되고 있기 때문에 현재까지는 부담 없이 쓰시면 됩니다. 물론 나중에는 어떻게 될지는 알 수 없으나 마이크로소프트 입장에서도 그동안 만들어진 VBA의 하위 호환성을 생각하면 쉽게 버릴 수는 없을 것입니다. (물론, 앞날은 알 수 없습니다. ^^)

단지, 닷넷 언어를 아신다면 조금 더 응용력이 높아질 뿐입니다.

VBA로는 한 줄이면 작동하는 코드가 닷넷으로는 열줄이 가볍게 넘는 것은 언어마다의 특성일 뿐입니다. 그렇기 때문에 세상에는 각각의 특성에 따라 사용하는 언어가 다양하게 존재할 수 있는 것입니다. (그러게요. 제발 모든 요구 사항을 만족하는 언어가 나와서 프로그래머들이 하나만 배워도 좋을 날이 오기를 저 역시 간절히 원합니다. ^^)

그리고 여기서 생각을 달리 하실 것이 있습니다. VBA로 한 줄이면 작동하는 이면에는 닷넷과 같은 식의 언어가 만들어 놓은 기반이 있었다는 점입니다. 예를 들어, 엑셀에서 만든 간단한 VBA 매크로를 볼까요?

Sub 매크로1()
    Range("B5").Select
    ActiveCell.FormulaR1C1 = "5"
    Range("B5").Select
    With Selection.Font
        .Color = -16776961
        .TintAndShade = 0
    End With
    ActiveWorkbook.Save
End Sub

VBA는 저렇게 쉽게 프로그램을 하고 있지만 가령 ActiveCell이라는 것도 Cell이라는 타입(클래스)이 사용된 것입니다. 즉, 위의 VBA로 만든 모든 코드가 클래스를 은연중에 사용하고 있는 것입니다. 만약, 클래스 개념을 엑셀에서 제공하지 않았다면 VBA에서는 다음과 같은 식으로 프로그램을 만들어야 했을 것입니다.

Sub 매크로1()
    RangeSelect("B5")
    ActiveCell_FormulaR1C1("5")
    RangeSelect("B5")
    
    Selection_Font_Color(-16776961)
    Selection_Font_TintAndShade(0)
    
    ActiveWorkbook_Save()
End Sub

저런 식으로 함수를 외워야 한다고 하면 VBA가 그다지 쉽게 퍼지지 않았을 수도 있겠지요? ^^

게다가 VBA 자체도 클래스가 있습니다. 잘 사용하지 않았을 뿐이죠.

VBScript/ASP User-Defined Class Objects
; http://classical-asp.blogspot.kr/2011/04/vbscriptasp-user-defined-class-objects.html

지금 당장 C#의 클래스가 낯설다면 VBA의 클래스를 한번 써보시고 C#의 것을 보시면 더욱 쉽게 이해가 되실 것입니다.

질문: 멤버는 또 뭐고 ?

멤버(Member)는 말 그대로 클래스에 소속된 것들을 의미합니다. 다음과 같이 클래스가 정의되어 있다면,

class Person
{
    string Name;
    int Height;
    int Weight;

    void Run() { }
}

Name, Height, Weight 속성과 Run과 같은 메서드를 모두 Person 클래스의 멤버라고 합니다.

질문: 씨샵 공부해도 좋을까요(효율적일까요) ? 

C# 책을 쓴 사람에게 이런 질문을 하시면 예상되는 답변은 하나입니다. ^^ 그런데, 특히나 질문하시는 분의 경우 다음과 같이 이야기를 하셨는데요.

Windows만 주구장장 사용할 사람이라면
절대로 보아야 할 언어가 아니라는 걸 깨닫는 데
시간이 너마나도 많이 걸렸더군요.. 깨끗이 포기..


확신하건데, 적어도 이런 상황에서의 개발 언어라면 C#만큼 효율이 뛰어난 것은 없습니다. 공부할 만한 가치가 충분합니다.

하지만, 바로 아래의 질문에서 걸리는데요. ^^

질문: 저와 같이 구체적인/협소한 목적을 지닌 초보자가 ?

글의 내용으로 봐서는 지금까지 VBA, AutoHotkey 정도를 만지시고 그 이상 개발 관련한 것에 뛰어들지는 않으실 듯 싶은데 이런 상황이라면 굳이 C#을 배워야 할 이유가 있을까 저도 의문이 듭니다.

C#을 배우는 것은 어찌 보면 '영어'를 배우시는 것과 별반 다르지 않을 수 있습니다. 영어도 해외 여행이나 어쩌다 만나게 될지도 모르는 외국인과 소통할 때 빼고는 실제로 그리 써먹을 만한 경우는 많지 않습니다. 단지, '준비가 된 사람'으로서 '영어'라는 응용력을 하나 갖게 되는 것에 불과하지요.

현재 삶에서 딱히 취미 삼아 배우고 있는 것이 없다거나, 별도로 목표를 두고 공부하시는 것이 없다면 C#을 지금 시기에 배워두시는 것도 좋을 듯 싶습니다. 그렇지 않은 경우라면, 책을 덮으시고 ^^ 좀 더 우선 순위가 높은 것에 집중하시는 것이... 좋겠고.



[연관 글]


donaricano-btn



[최초 등록일: ]
[최종 수정일: 7/10/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 쓴 사람
 



2014-02-24 11시55분
[질문 드렸던 사람입니다] 오오.. 이백 줄이 넘는 답변, 정말.. 감사합니다.



0.
말씀하신 것과 같이 책에 다 기록해 놓으셨을 것입니다.
상세하고 친절하게..
혹은, 짧은 내용일 수도 있고,
흠좀무, 행간일 수도 있겠고..

시간을 갖고 좀 더 노력해 보지요..
친절하고 상세하신 설명 감사합니다.

(단순하고, 기초적인 내용..
 아는 사람의 입장에서는 너무나 당연할 수도 있는,
 반복적인 질문에 답변해 주셔서 감사합니다.)
 
 

1.
클래스..

사용하신 용어가..

구심점/좀 더 쉽게
직관/
관리/편리
조립/조합
접근/보호
표현/자유

혼자 생각을 해 보면..

클래스...    학급/학과/학년/과목/구분/구획/분할/분리/분단..
클래스..     편을 가르고, 뭉치를 만드는 행위.. (나쁜 뜻은 전혀 없습니다. 지금은 컴퓨터 공부 중일 뿐.. ^^)
클래스...    편을 가르기, 좀 더 유연하게/자유롭게 편 가르기..
클래스...    편리한 관리.. 편리한 통치가 목적.. (정치적인 의도는 전혀 없습니다. 지금은 컴퓨터 공부 중..)
클래스...    컴퓨터 프로그램 발전 순서가.. OO에서 Non-OO를 지향했다면 (역사적 사실과 반대로..), 융합/통합/통일/단일/화합 등등의 개념이 절대적으로 필요했겠네요.. 좋은 의미의 혼동/혼돈/뒤섞임...


2.
인스턴스..

도장, 인쇄물
붕어빵틀, 붕어빵.. 정도 ? 아직은 뭐...


3.
멤버...

그냥, 한 학급의 애들..인 듯..



4.
네,
엑셀 VBA에 클래스 설명을 연결시키니까.. 이해가 완전 빠릅니다.
라고... 적고 싶은데..

오히려.. 더 이해가 전혀 안 됩니다. 클래스가 여기서 무슨 상관인지..
저는 그냥 단순히..
색깔 바꾸어라, 쉐이드 넣어라.. 이렇게만 생각하고, 이제까지 죽 사용했었습니다.
필요한 함수/인수/리턴 달달달 외었구요..
여기는 거의 비슷한데, 이 함수가 전혀 적용이 안 되네 ? 하면서..

클래스가 대체 여기서 무슨 관계가 있다는 건지...
(질문 드리는 것 아닙니다. 혼자말입니다..)

VBA에도 클래스가 있다는 말은 물론 많이 들었습니다.
사용한 적은 당연히 없고요..


5.
네,
엑셀의 VBA 사용자와 활용 중요도를 보면, 앞으로 절대로 VBA 안 없어질 것 압니다.
그리고, 저에게도.. VBA 작동 잘 되고, AutoHotkey에서 COM 사용하면 외부 제어도 잘 됩니다.
(저는 엑셀 VBA 사용 시간은 지난 5년 다 합해도 5시간 안 됩니다. 주구장장 Word VBA ^^)

그런데, 그런 경우가 있더군요,
대량을 빨리 처리해야 할 때..
그때, VBA는 너무 느리고, 외부에서 VBA를 간접으로 처리하면 대략 열 배는 더 느려지게 되더군요...
(현업에서 일 하시는 분의 "대량"에 비할 바는 아닙니다. 그저, 수천 행의 표로 된 파일이 수백 개 정도일 뿐이니까요..)

씨샵을 배우면 좀 빠라지지 않을까,하는 생각으로 접한 것입니다.
Open XML SDK 사용법 유튜브로 보다보니까(MS 직원이던데)..
그런 말을 얼핏 하길레..

질문도 사실은 그렇게 해야 하는 거였는데..
질문을 잘 하기도 매우 어렵군요..


6.
네..
올 한 해 계속 시도해 볼 생각입니다.


감사합니다.
그럼..
[손님]
2014-02-25 04시29분
[지나가는 과객] 클래스와 오브젝트와의 관계를 가장 직관적으로 설명하면 이렇습니다.
클래스는 붕어빵이나 뿔빵을 찍어내기 위한 "틀"이라고 생각하면 됩니다.
그 틀에서 밀가루와 팥을 넣어 만들어진 붕어빵이 바로 오브젝트(또는 인스턴스)입니다.

클래스의 구성요소는 필드(멤버변수)와 메서드(멤버함수)가 있습니다.
필드는 그 클래스를 구성하고 있는 특징들입니다.
메서드는 그 필드들을 조작하는 어떤 동작들입니다.

이런 내용들은 책에 있을것 같은데...
위 내용은 OOP 기본을 다루는 책마다 다르게 설명되어 있습니다.
더 자세한것은 객체 지향 프로그래밍에 대한 서적을 보시면 좋을것 같네요.
[손님]
2014-02-25 10시32분
[지나가는 손님 댓글에..]
Alpaca (Intermediate Perl)에서 OOP 소개하는 내용을 보면,

소가 운다, 모오오..
말이 운다, 네에에..
양이 운다, 바아아..

이렇게 시작해서 별 어려운 얘기도 아닌데,
길게 길게 나열을 합니다.
그렇게 읽어나가다 보면..
그래서 뭐.. 라는 생각만 들고,
프로그램하는 데 무슨.. 동물만 출몰하고..

저자는.. "코드에 이름을 붙여서 관리하므로, 실행이 빠르고 유지가 편하다."라고 하는 데..
독자는.. 이해가.. 전혀 안 되고..

객체라는 것이.. 대체.. 함수 혹은 서브루틴과 뭐가 다른가, 암만 봐도 모르겠더라능...
뭣 땜시 이렇게 복잡하게 꼬아서 일을 해야만 하는가..

드디어,
Object destruction
Beating a dead horse,,

오브젝트는 파괴하지 못하고, 저의 멘탈이 파괴되었고,
말이 죽었는지 살았는지는 잘 모르지만, 확실한 것은 제가.. 죽을 맛이었습니다.

한 대여섯 번 읽었지요 ??

설명 혹은 비유는 참으로 쉬운데,
이해 혹은 응용할 능력은 전무한 혹은 난망한.. 그런 묘한 결과가 나왔던 동물농장이었습니다.

좋은 댓글 감사합니다.
[손님]
2014-02-26 01시00분
[이성환] 뜬금없이 장문의 댓글 한 번 달아봅니다....

질문하신 분은
클래스가 무엇인지 보다는 왜 써야 하는지가 더 의문이신 거 같습니다.
(클래스에 대한 설명은 본문의 설명보다 더 쉽고 명확한 내용은 찾기 어려울 듯)

한 페이지에 모든 작업을 다 때려박고 함수들을 쭉~ 나열하면
가독성도 떨어지고 일부 함수들만 사용해야할 변수들에 대한 보호도 불가능하고
비슷한 기능을 추가할 때 코드의 재사용이 쉽지 않다 등등 단점이 있습니다.
그래서 이런 절차 지향의 불편한 점들을 극복하기 위해 클래스 단위, 인스턴스 단위의 구조를 만든게
객체 지향입니다. 그리고 C#은 객체 지향 언어이죠.
(쉽게 말하면 비슷한 목적을 가진 함수나 변수들을 하나의 범주로 묶어 사용하자 가 클래스를 사용하는 이유입니다.)

클래스에 대한 부분은 객체 지향에 대해 좀 더 깊게 공부하시면 자연히 이해가 될 듯 합니다.

그리고 4. VBA 예제는 클래스를 이해하고 접근해야 전체적인 이해가 더 쉬울 듯합니다.
제가 VBA를 잘 몰라서 맞는지는 모르겠는데 코드만 보고 이해하기로는
Range("B5").Select 요 코드에서는
Range("B5") 이 함수를 호출하면 Range 관련 클래스 객체가 리턴되고
이 Range 관련 클래스 객체가 가지고 있는 Select 메서드를 호출하는 형태로 보입니다. (인자가 없으면 메서드 호출인가요?)
Range관련 클래스에는 범위 관련 기능이나 멤버 변수들을 가지고 있는 것으로 보이고
그 중에 해당 Cell을 선택하라 는 메서드가 Select 라고 생각이 되네요.

Selection.Font.Color = -16776961 이 부분도 마찬가지로
Selection 클래스 객체가 가지고 있는 Font 객체로 접근 ->
-> Font 클래스 객체가 가지고 있는 Color 라는 변수에 -16776961 를 할당해라 정도의 내용으로 보입니다.

함수의 리턴이 값뿐만 아니라 특정 클래스의 객체라는 것을 이해하면 어렵지 않아 보이네요.

클래스의 개념이 아니라 임의의 함수들만 나열된 것이라면
아무래도 필요한 기능과 함수들을 연상하기 쉽지 않을 테고 외우기도 쉽지 않을테니
(사실 함수를 외울 때 기능별로 함수들을 외우는 것 자체가 이미 클래스처럼 사용하고 있는 거라고 할 수 있지요.)
사용자 입장에서 클래스 개념없이 접근 한다면 클래스 개념을 가지고 접근하는 것에 비해
이해도가 높지 않을 수 있겠다는 얘기로 생각하면 될 듯 합니다.


근데 요즘 느끼는 건데
제가 한창 닷넷 공부할 때 성태님 같은 분을 알고 있었더라면 (온/오프라인으로)
참 좋았을 텐데 라는 생각을 자주 하곤 합니다.
[손님]
2014-02-27 02시16분
[질문 드렸던 사람입니다] 이성환님 댓글 잘 보았습니다.

용어를 새로운 것으로 쓰려고 노력들을 해서 그렇지.. 사실..
내용 자체는 그리 새로운 것은 아니다..라고 이해가 됩니다.
"묶는 것" 정도로 말이죠..
(살다보면 묶어야 할 때도 있고, 풀어야 할 때도 있고..)

수고하세요..
[손님]

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
12857정성태11/24/202129개발 환경 구성: 606. WSL Ubuntu 20.04에서 파이썬을 위한 uwsgi 설치 방법
12856정성태11/23/2021140.NET Framework: 1121. C# - 동일한 IP:Port로 바인딩 가능한 서버 소켓 [2]
12855정성태11/13/202165개발 환경 구성: 605. Azure App Service - Kudu SSH 환경에서 FTP를 이용한 파일 전송
12854정성태11/13/2021156개발 환경 구성: 604. Azure - 윈도우 VM에서 FTP 여는 방법
12853정성태11/10/202183오류 유형: 766. Azure App Service - JBoss 호스팅 생성 시 "This region has quota of 0 PremiumV3 instances for your subscription. Try selecting different region or SKU."
12851정성태11/1/2021203스크립트: 34. 파이썬 - MySQLdb 기본 예제 코드
12850정성태10/27/2021444오류 유형: 765. 우분투에서 pip install mysqlclient 실행 시 "OSError: mysql_config not found" 오류
12849정성태10/17/2021462스크립트: 33. JavaScript와 C#의 시간 변환
12848정성태10/17/2021393스크립트: 32. 파이썬 - sqlite3 기본 예제 코드
12847정성태10/14/2021371스크립트: 31. 파이썬 gunicorn - WORKER TIMEOUT 오류 발생
12846정성태10/7/2021475스크립트: 30. 파이썬 __debug__ 플래그 변수에 따른 코드 실행 제어
12845정성태10/6/2021838.NET Framework: 1120. C# - BufferBlock<T> 사용 예제 [4]파일 다운로드1
12844정성태10/3/2021389오류 유형: 764. MSI 설치 시 "... is accessible and not read-only." 오류 메시지
12843정성태10/3/2021433스크립트: 29. 파이썬 - fork 시 기존 클라이언트 소켓 및 스레드의 동작파일 다운로드1
12842정성태10/1/2021500오류 유형: 763. 파이썬 오류 - AttributeError: type object '...' has no attribute '...'
12841정성태10/1/2021507스크립트: 28. 모든 파이썬 프로세스에 올라오는 특별한 파일 - sitecustomize.py
12840정성태9/30/2021526.NET Framework: 1119. Entity Framework의 Join 사용 시 다중 칼럼에 대한 OR 조건 쿼리파일 다운로드1
12839정성태9/15/2021784.NET Framework: 1118. C# 10 - (17) 제네릭 타입의 특성 적용파일 다운로드1
12838정성태9/13/2021778.NET Framework: 1117. C# - Task에 전달한 Action, Func 유형에 따라 달라지는 async/await 비동기 처리 [2]파일 다운로드1
12837정성태9/11/2021507VC++: 151. Golang - fmt.Errorf, errors.Is, errors.As 설명
12836정성태9/10/2021511Linux: 45. 리눅스 - 실행 중인 다른 프로그램의 출력을 확인하는 방법
12835정성태9/7/2021461.NET Framework: 1116. C# 10 - (16) CallerArgumentExpression 특성 추가파일 다운로드1
12834정성태9/7/2021476오류 유형: 762. Visual Studio 2019 Build Tools - 'C:\Program' is not recognized as an internal or external command, operable program or batch file.
12833정성태9/6/2021601VC++: 150. Golang - TCP client/server echo 예제 코드파일 다운로드1
12832정성태9/6/2021453VC++: 149. Golang - 인터페이스 포인터가 의미 있을까요?
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...