boost asio 이용한 채팅프로그램
기본틀은 ㅅㅅㅅ님이 짠것에 거의 그대로임
제페님이랑 ㅅㅅㅅ님이 많이도와주심 ㄳ
서버====================================================================================================
클라====================================================================================================
얼마나공부해야이런거만드나요
저도 수박겉핥기로 한거라ㅋㅋ 기본부실 모래성입니다
c/c++/자료구조/STL 두달정도보고 이건 한 일주일정도 본듯 근데 분량자체는 그렇게 안많아요 제가 놀자판 뛰어서그러지
귀욤귀욤
으엉 쩐당 난 뭐하고있는거람
ㄴ 기만질 ㄴㄴ해;;;;
난 외부 라이브러리 습득하기 귀찮아서 그냥 일일이 socket() connect() 함ㅋㅋㅋㅋㅋ
허접하네요..
객체지향 관점에서 소시지빵점 드리겠습니다
그리고 윈도우10 정품 쓸만한가요? 정품인가요?
문익점보단 소시지빵점이 낫죠. 그리고 정..품..안..쓰고..있..습니다.... 그만..큼... 고..통도..받았...습니다...... 마우..스..뚝뚝..끊김...인터넷...뚝..뚝..끊..김... 업그레..이드로...강제..초기화......화면...흐리게..나옴... 각종..드라이버...충돌.... 잔...고장..넘쳐나..
어근데 정말몰라서 잘모르니물어보는건데 객체지향관점에서 어떤느낌으로 안좋다는거임? 뭐그런거잘모름 정말
뭐 더 잘짤수있는 구조나 관계가 가능한데 난잡하다는것?
님 실력을 시기해서 저런다네요
저도 잘 모르겠는데요?? 전 일개 방금 C++을 1회독을 끝낸 좆고딩일뿐입니다. 저도 채팅프로그램이 만들고 싶군요.
부럽네요 전 C++1회독한 군필 백수인데
서버는 객체지향보단 절차지향이 나음 클라는 암거나 해도 되는데
히익 람다식
1회독이라니 무슨책 봄
?
저물어보는거라면 저 윤성우 열혈 c++봤자늠ㅋㅋ 은행..기억나시는지... 람다나 스마트함수같은건 제페님코드보다가 나와서 주먹구구식으로 하나하나 배움 이펙티브, 최신문법 그런거따로공부한적없음
c++을 하셨다면 윤성우스승님 말씀대로 파일도 분할하고, 가급적이면 캡슐화가 되어야 할 것 같군요. 저 채팅서버를 한번만 쓰고 버릴 게 아니라면 클래스를 라이브러리화 하기 위해서 재사용할 메소드를 가상함수로 해주어야 하고, PORT와 PACKET_SIZE를 클래스 안으로 넣어주고 패킷배열도 클래스로 매니저클래스를 만든다거나 그리고 예외처리도 if문이 아니라 C++ 예외처리를 했으면 좋겠군요. 물론 전 할 줄 모릅니다.
파일도분할하고 -> 소스코드 100줄도안되는걸 분할하면 더난잡해질듯 / 한번만쓰고 버릴것 / 포트랑 패킷사이즈 빼는게 바꾸기도 보기도 쉽고 좋을거라생각 / 패킷배열은 뭔소린지모르겠음 / 예외처리문 밖으로빼면 개판날듯 eu 내가 트라이캐치랑 안친해서
그보다 연습으로 만든거면 걍 생각나는대로 싸대면 됨
한번쓰고 버릴거라면 안하해본는것만 못합니다. 포트랑 패킷사이즈도 클래스에서 사용되는거므로 클래스밖에 매크로으로 선언되면 캡슐화가 깨진 셈이 됩니다. 이 클래스를 딴데서 사용하려고 할 때 매크로도 별도로 넘겨주어야하기 때문임니다. 소스코드 100줄도 안되도 재분할 해서 올려주세요.
그럼 이만 히키좆고딩자퇴백수 물러나겠슴니다
이렇게 실험적으로 만들어보고 아하 요렇게 하면 되는구먼 하고 알아둔 다음 실제로 뭔가 만들어볼 때는 최선을 다해서 설계를 하고 OOP원칙을 생각하고 그러면 되겠읍니다. 물론 매크로는 확실이 안 좋으니까 const 써욤 ㅎ
ㄴ이미 클래스로 만들어진 시점부터 캡슐화된것을 쓴겁니다
스캇성님도 이렇게 말했지요 "#define을 쓰려거든 const, enum, inline을 떠올리자"
#define PORT 7000 보다 const unsigned short PORT = 7000; 가 많이좋음?
const static unsigned short PORT = 7000;
전처리기에서 매크로쓰는게 더좋을줄알고있었는데 왜지;;
마 전역변수인데 무슨놈으 스태틱은 스태틱이여
이렇게 한번쓰고 버릴용도로 연습소스를 만들엇어도 이런저런 윤성우선생님의 가르침을 따라 소스를 수정햇다면 당신은 빌게이츠가 되엇을겅입니다
enum도 추가된 enum struct 같은 걸 씁시다 타자 좀 더 치더라도 코딩중 실수를 안하기 위해
클래스 안으로 너어야 하니까 static 으로 하라고 그런습니다.
매크로는 전처리기가 처리하니까 캡슐화 같은게 존재할 수가 없서용 그리고 타잎도 정해줄수 없고 그러합니다
상수들도 클래스 안에서만 사용대니까 const static unsigned short PORT = 7000; 로 하라 그런겁니다 예예
그러니까 캡슐화가 가능하져
굳이 성능을따지자면 매크로가 더 우월한것은맞음? 활용성의 측면에서 매크로보다 const를 장려한다는것?
그리고 객체마다 별도로 유지대는게 아이고 하나만 존재하니꼐 저래 하는게어떨까싶네여
성능똑같슴니다 아무상관엄꼬여
디버깅 편하자고 매크로 지양하는 것임
디버깅편하기위해 매크로지양한다는건 ㅇㅈ... 근데뭐 포트넘버나 패킷크기정도 숫자 바꿔주기편하게 한다는의미도있고 보기도좋고 매크로로슨건데 함튼 성능은? 매크로가 난 성능 디게 조은건줄 알고있었는데 아님?
와 이분 개고수셧네..
저개허접떄기입니다 ㄹㅇ
매크로가 성능이 조은게 아니져. 매크로는 걍 전처릭ㅘ정에서 치환댈뿐임니다.그게끗임.. 성능을 따질라면 실행속도(컴파일속도 잘 안따지져 요새?)/파일크기인데....
간단한 hello world를 출력하는걸 해보센.. 그리고 실행파일을 peView라는 프로그램이 잇는데 그걸로 열어보셈. 실행파일 자체에 "Hello world"문자열이 그대로 노출댈것임메.
성능성능 무슨성능말하는건지모르겟메
TMP를 김치에 싸서 드셔보세요
옛날메타랑 요새메타랑 달라서 재사용성 같은거 보지않을까요
함수를 매크로화해서 전처리기에서 치환하는식으로 하면 call하는데 걸리는시간이 없어지니 성능이 좋은거아닌지?
ㅇㅇc에서 넘어와 c++배우는이유는 무조건 재사용성인데 그리고 c++도 철학이 바로그런거인데... 클래스를 완전히 일반타입처럼 만들기위하여... 그런걸 안하면 노쓸모
그런 용도면 인라인하는게 낫음~
매크로 함수 같은건 런타임에 하던걸 컴파일 시점도 아닌 소스처리 시점에서 만드는 것이므로 성능이 좋아지지만 const는 아마 요새 컴파일러들은 똒똑해서 알아서 잘 해줘서 성능에 별 차이 없을듯
호출 성능이 좋져. 그런데 님은 일단 지금 매크로함수가 아닌데다가, 매크로 함수는 객체지향관점에서 ㄴㄴ죠. 왜냐면 그냥 인라인함수처럼 걍 치환댈뿐이니깐 코드섹션에 걍 치환대겟져
c++ 특징은 은닉화 아님? 협업을 위한 서로 알필요 없는 부분 블랙박스화
답은 "Effective C++"입니당 ㅎ
인라인함수가 매크로보다 좋아요? 뭐일단 인라인은 나랑안친하니 잠깐미뤄두고 그럼 매크로는 뭐따쓰라고 매크로 서러워서 울겠네
그리거 함수를 매크로화해서 전처리기에서 치환하는것보다 인라인함수를 쓸 생각을 했어야함
아뭐 내껀지금저거 끽해야 매크로두줄 들어간건데 함수 매크로화는 다른얘기임 저얘기아님
그럼 매크로는 언제씀?
인라인함수 의미가 머냐면 말그대로 정의부분을 호출부분에다 삽입하는겁니다. 매크로함수랑 똑같져? 근데 차이점이 머냐면 인라인함수는 타입이니께 타입에 따라 오버로딩하거나 템플릿으로 해줘야져
만약저게함수였다 치더라도 함수자체가 크지않은함수에 호출이 잦지않은데 매크로 > 함수화 아닌지
aaa// 전처리과정(상속,import포함)이 없으면 썼던 클래스 복붙해야하니까... 코드짧게쓰는 재사용성이 아닐까 조심스레 초보자가 의견을내봅니다
그에 반면 매크로함수는 타입상관ㄴㄴ에 괄호로 감싸주는등 좀 복잡하져 ㅎㅎ
ㅇㅇ//무슨말인지 모르겟음
난 객체지향간점에서 말하는거임... 매크로든 매크로함수든 객체지향간점에서 모든 영역에서 사용댐.. ㅇㅈ?
매ㅔ크로로 안하고 const static 으로 햇으면 그 클래스 안에서만 사용댐 ㅇㅈ?
전역변수로쓰면 모든 클래스에서 사용 ㅇㅈ?
그놈의 객체지향관점이란건 참...
걍전역변수 const unsigned short PORT를하던 #define PORT 매크롤하던 여까진 그렇다쳐도 괜히 스태틱으로 일을 복잡하게 할필요가
그런데 연습용 짧은 코드 가지고 남 평가하는 건 좀 아니다 싶네여 서로 에너지 낭비 입니다
ㅇㅇ//const static이 왜 전역변수지? 공부다시하셈
ㄴ전역변수로 쓰면 해결이란 소린데
내말처럼 전역변수 const unsigned short PORT 로쓰지 왜 static을 하냐는얘기겠지
ㅇㅇ//const unsigned short PORT를 클래스 안으로 너으라 이얘기임.. const로 하면 상수.(매크로랑 똑같지여), static으로하면 정적임(못바꿈, 클래스에 귀속댐->클래스밖에서 못씀)
솔직히 ㅋㅋ 사실나는 별 신경안쓰임ㅋㅋㅋㅋ
에너지 마니 썼다.. 여기서 물러난다. 자러간다.. 아무튼 ㅅㄱ
포트를 그냥 전역변수애 넣고 쓰는건 어떰? 프로그램끝날때까지 유지되는데
원리가 뭐죠? winapi호출안하는 것 같던데
static 하면 정적인거예여? 히익
static이 정적이죠 머임?
그리고 나중에 포트나 ip의 수정이 필요한 가령 서버의 종료상황에서 다른클라로 서버권한이 넘어갈경우를 고려한다던가 하는 문제를 고려해도 포트나 ip를 클레스에 귀속시키는건 좀? 이런거까지 안가도 자체적으로 입력받고 출력하는경우만생각해도 클레스 귀속 스태틱하느니 걍 깔끔하게 전역변수해서 끌어다쓴다고 뭐 크게 용량먹는것도아니고 나쁠꺼없다고봄
그리고 서버입장에선 클래스외적인걸 쓸일이 없을텐데? 한클래스에 여러 메소드만 돌리면 될일을
http://viiiin.tistory.com/49
이거 보고 네이밍에도 같이 신경쓰면 좋을거같고 객체지향으로 남들이 짠거 한번 봐도 좋을거같음.. 한번 다듬고 채팅방만들고 그런것도 해보면 재밋음.. 매크로는 뭐 죽을죄진것도 아닌데..음..
소름
수정이필요하면 const ㄴㄴ 하면댐.
ㄴ 문익점 vs 소세지빵점 논쟁이랑 별반차이없는거같음ㅋㅋㅋ
static으로 하면 일단 객체마다 공유해서 오지구여 좋구여. 이게 정적이지 머임
아 안되겟네여 문익점드리겠습니다 ㅅㄱ
표기법같은건 관례나도 저거 보고 알긴했는뎅 이렇게 쓰는게 개인적으로보기도좋고... 이쪽으로 배워서.. 아마협업하거나 다른사람과 함께한다면 그쪽표준에 맞추는거에대해선 기분좋게 당연하다고생각함 ㅎㅎ 가는곳에 따라서 맞춰쓰는걸로 잘,....
귀신같이 내근황은 찾아보러오내
boost asio 동기비동기 에코서버만드는거 익히고 소켓 서버 세션 개념적인것만 간략하게암 로우하게 짜라하면 몰라하나도 asio만 할줄암 다할줄아는것도아니고 저정도수준이 max
누워서 생각해보니까 전역변수쓰거나 const쓰는게 맞음
aaa//되도->돼도