[바미] Go - 숫자야구를 만들어보자!(2)
·
프로그래밍(Basic)/Golang
지난번에 이어서 숫자야구를 마저 만들어 보도록 해봅시다! 그 다음은 키보드로 부터 입력값을 받는것인데 여기에 들어가면 알 수 있습니다. func InputNumbers() [3]int { // 두 개의 숫자 3개를 비교해서 결과를 반환한다. var rst [3]int for { var no int _, err := fmt.Scanf("%d", &no) if err != nil { fmt.Println("잘못 입력 했습니다.") continue } for no > 0 { // 1 n := no%10 no = no/10 rst[idx] = n idx++ } break } return rst } 이 Scanf가 어떻게 동작하는지 볼려면 여기에 들어가면 되는데 return값으로 몇 개를 입력받았는지와 실패 시 ..
[바미] Go - 숫자야구를 만들어보자! (1)
·
프로그래밍(Basic)/Golang
종이와 게임으로 했었던 게임인데 룰은 간단합니다. 먼저 두 사람이 0 ~ 9까지의 겹치지 않는 숫자 3개를 생각해 둡니다. 첫 번째 A 사람이 2 6 3을 생각해두었고, 두 번째 B 사람이 5 4 1을 생각했다고 가정했을 때, 각자 자기 차례가 되면 숫자 3개를 말합니다. A 사람이 1 2 3이라고 했을 때 B는 상대방이 말한 숫자와 자신이 생각한 숫자와 비교를 합니다. 그래서 자리도 같고 숫자도 같으면 '스트라이크', 숫자는 같지만 자리가 다르면 '볼'이 됩니다. 그러면 B는 5 4 1을 생각했었고, A는 1 2 3을 외쳤으니 1 볼이 되죠. 그렇게 해서 B차례가 되었고, A에게 마찬가지로 1 2 3을 외쳤을 때 2 6 3과 1 2 3을 비교해보면 2는 숫자가 있지만 자리가 다르고, 3은 자리와 숫자가..
[바미] Go - 포인터에 대해 알아보자!
·
프로그래밍(Basic)/Golang
C#, Java는 포인터가 없지만 명시적으로 없을 뿐이지 묵시적으로 내부에선 포인터를 사용하고 있습니다. Golang은 포인터가 있습니다. 대부분 현대 언어는 포인터가 없죠. 이해하기 어려운 부분도 있고, 포인터 연산자체가 메모리를 직접 접근하기 때문에 위험하기 때문에 다른 언어들은 포인터를 감추어 내부에서만 사용하고 있습니다. 포인터를 감추다보니 다른 언어에서는 또 다른 문제들이 생겨나게 되었는데요. 내부 기능을 이해하기 어려운 부분도 있고, 이 타입이 Pointer타입인지, Value타입인지를 명시적으로 나와 있지 않다 보니까 프로그래머가 알고 있어야 되는데 그것을 잘 모르고 사용하면 문제가 되는 케이스가 발생하게 됩니다. 그 반면에 C, C++은 포인터를 가지고 있습니다. 그런데 포인터의 연산이나 ..
[바미] Go - 구조체에 대해 알아보자!
·
프로그래밍(Basic)/Golang
구조체? 영어로는 Struct라고 쓰이는데 말 그대로 어떤 구조를 가진 것이라고 보면 됩니다. 예를 들면 이런 것이죠. type Person struct { name string age int } 이런식으로 여러가지 변수들을 하나로 묶어서 하나의 이름으로 말하는게 구조체라고 보면 됩니다. 이것이 나온 이유는 프로그래밍이 발전된 과정을 보면 응집성(Cohesive)이 올라가고, 종속성(Dependency)이 낮아지는 방향으로 프로그래밍이 발전해 왔다고 보면 됩니다. 이렇게 만들어야 좋은 프로그래밍을 할 수 있기 때문에 이런 방향으로 계속 발전해 왔습니다. 그래서 이 Struct는 응집성을 높이는 방법입니다. 어떤 결합된 개념들이 있는데 예를 들면 성적 처리 프로그램을 만든다 했을 때 중요한 객체는 학생이 ..
[바미] TDD의 장단점에 대해 알아보자!
·
프로그래밍(Basic)/Golang
들어가기 앞서서 한 가지 소개할 것이 있는데 소프트웨어 공학쪽에 유명한 책이 있습니다. 맨먼스 미신이라는 책인데요. 여기서 나오는 유명한 말이 있습니다. There is no silver bullet. 은총알은 없다. 은총알은 늑대인간을 죽일 때 사용되는 총알 입니다. 여기서의 은총알은 모든 문제를 한방에 해결하는 솔루션을 의미하는데 한 방에 모든 문제를 해결하는 솔루션은 존재하지 않는다. 라는 의미 입니다. 즉, 어떤 기술을 가져오더라도 그것이 한 방에 해결하는 솔루션이 아니며, 항상 장 단점이 생기기 때문에 무조건 다 좋은 것이거나 장점만 가지고 있는 것은 없다는 것이죠. 그렇기 때문에 TDD도 마찬가지 입니다. 우선 장점부터 살펴보죠! 첫 번째 장점으로 Test Case가 많아집니다. Test를 먼..
[바미] TDD에 대해 알아 봅시다!
·
프로그래밍(Basic)/Golang
TDD? TDD란 Test Driven Development의 약자인데 테스트 주도 개발법이라는 뜻이며 개발 방법인데 테스트가 주도하는 개발 방법이라는 의미 입니다. 기존의 개발법은 설계 - 코딩 - 테스트 였어서 이 순서대로 진행하다 테스트에서 문제가 발생하면 다시 코딩하고, 테스트하여 코딩과 테스트가 반복되는 방식이였었는데 TDD는 테스트 - 코딩 - 개선을 반복하는 방식입니다. 간단하게 TDD를 실습해보자면 Calculator("+", 3, 2)를 만들어서 실행시켰을 때 5라는 결과가 나오는 함수를 만들어 봅시다. TDD니까 처음부터 테스트를 시켜줍니다. hello.go package main func main() { Test() } 이렇게 작성 후에 코드를 실행 시켜 보면 undefined: Te..
[바미] MMORPG 서버 구조에 대해 알아보자.(完)
·
Networking
지난번에 싱글프로세스 vs 멀티프로세스를 했었는데 이번에는 싱글 쓰레드 vs 멀티 쓰레드 를 다뤄보겠습니다. 싱글 쓰레드는 하나의 프로세스에 Work Thread가 하나인 경우를 말하고, 멀티 쓰레드는 하나의 프로세스에 Work Thread가 여러개인 경우를 말합니다. 싱글 프로세스이면서 멀티 쓰레드를 쓸 수 있고, 멀티 프로세스이면서 싱글 쓰레드를 쓸 수 있고, 멀티 프로세스이면서 멀티 쓰레드를 쓸 수 있습니다. 싱글 프로세스이면서 싱글 쓰레드를 쓸 수 있지만 현재 시점에선 공짜점심이 끝난 상황에서 싱글 프로세스로 가려면 서버 머신이 좋아야 하는데 이미 서버 클럭수는 한계에 부딫혔기 떄문에 클럭 수가 더 늘어나기에는 기대하기 힘들고, 코어 수만 늘어나고 있고, 16개 코어까지도 가능한데 이 코어들의 성..
[바미] MMORPG 서버 구조에 대해 알아보자.(2)(싱글프로세스 vs 멀티프로세스)
·
Networking
저번에 이어서 싱글프로세스 구조와 멀티 프로세스 구조의 차이에 대해 좀 더 알아보도록 하겠습니다. 싱글 프로세스 구조를 알아봅시다. 싱글프로세스 구조는 프로세스가 하나 즉 프로그램 하나가 돌아가는 걸 의미하는데 이게 개념적으로 이렇다는 얘기지 꼭 싱글 프로세스 구조라고 해서 프로그램이 무조건 하나다. 라고 볼 수는 없습니다. 단순히 봐서 싱글 프로세스 구조면 게임서버 하나다. 라고 보면 됩니다. 하나의 게임 서버로 어떤 서비스가 게임이 서비스 된다라고 봤을 때 이걸 싱글 프로세스라고 보면 됩니다. 예를 들어 봅시다. WOW라는 게임이 있는데 WOW의 월드가 여러가지가 있는데 각 월드가 하나의 프로세서로 돌아간다면 싱글 프로세스로 볼 수 있고, 여러 게임 프로세스들이 하나의 월드를 구성한다면 멀티 프로세스..
[바미] MMORPG 서버 구조에 대해 알아보자! (1)
·
Networking
MMORPG서버 구조에 대해 알아보기 전에 MMOPRG에서는 어떤 요구사항이 있기 때문에 이런 서버 구조가 필요한지 부터 알아보도록 하겠습니다. MMORPG의 서버쪽에서 가장 큰 문제점은 유저가 많다는 점입니다. 이 말은 동시 접속자 수가 많다는 이야기고, 서버가 감당해야 될 작업량이 많다는 것이죠. 그래서 작업량의 기준을 보면 게임에서는 Actor라고 보면 되는데요. 예를 들면 Player, NPC(몬스터 포함) 그리고 컨트롤 존(Control Zone)이라고 해서 조종되는 영역을 의미하는건데 예를 들면 이런 것이죠. 필드에 독이 깔려있을 때 Player나 NPC가 그 영역에 들어가면 도트 데미지를 받는 것인데 도트 데미지를 어떻게 주는지, 독 우물이라는 Actor가 있고, 그 독 우물이 매번 다른 A..
Bami
기록하며 성장하기