언어 & 프레임워크/Go

언어 & 프레임워크/Go

Go: Go 답게 코드 작성하기

Go 언어는 C언어를 일부 계승하였기 때문에 다른 언어와는 사용법이 상당히 달라서 자바와 같이 전통적인 객체지향적 프로그래밍에 익숙한 경우라면 적응하기 어려울 수도 있다. 특히 Go 에는 예외가 없고 에러로만 처리하는 것도 그렇지만, 에러의 처리 방식이 다소 호불호가 갈리는 방식이기 때문에 이를 단점으로 삼는 사람도 있는 것 같다. 에러에 대한 내 의견 또한 아래에서 언급해볼 것이다. Effective Go 을 읽어보면 더욱 좋겠지만, 그와 관련된 포스트는 이후에 이야기해보도록 하자. https://gosudaweb.gitbooks.io/effective-go-in-korean/content/ README · Effective Go in Korean gosudaweb.gitbooks.io panic 은 ..

언어 & 프레임워크/Go

Go: 고루틴과 채널 (go-routine, chan)

Go 에서 동시성을 제어하는 일은 너무나도 쉽다. 너무 쉬워서 남발하는 경우까지 나올 정도로 쉬운데, Go 의 동시성은 고루틴(go-routine)이라고 하는데, 이는 OS 스레드를 한 번 더 추상화한 코루틴(co-routine)이다. 이러한 동시성은 멀티 프로세서를 사용하여 실행하거나 문맥교환(Context-Switching)을 통해 동시에 실행되는 것처럼 행동한다. 고루틴과 채널에 대한 내용은 상당히 길기때문에 해당 포스팅에서 전부 이야기할 수는 없을 것이라 여기서는 기초적인 것만 이야기하고, 더 자세한 것은 이후의 포스트에서 다룰 예정이다. go & go-routine main() 함수도 사실은 main() 고루틴이다. 이러한 고루틴을 실행하는 것은 아주 간단한데, 단순히 그냥 go 키워드만 붙여주..

언어 & 프레임워크/Go

Go: 에러와 패닉 (panic, recover)

예외가 없다고? 그렇다. Go 언어에는 예외(Exception)가 없다. 에러로 모든 것을 처리한다. error 빌트인 타입은 존재하긴 하지만, 그렇다고 타언어처럼 모든 에러에 대해 타입이 매핑되어 있는 것은 아니다. 내가 접한 언어 중에는 Syntax, Out of Range 등을 전부 나눠놓은 경우가 있었는데, 그다지 좋은 기분이 들지는 않았다. 아니면 에러와 예외를 둘 다 사용하여 컴파일이나 정적으로 발생하는 것은 에러로, 런타임 중에 발생한 것은 예외로 하여 개별 클래스가 계층에 따라 분리된 경우도 있었는데, 상당히 헷갈리기 그지 없었다. Go 에는 에러와 패닉이 있는데, 패닉은 런타임 중에 발생하는 치명적인 에러를 의미하며 프로그램이 더 이상 진행될 수 없는 수준의 에러다. 상당히 치명적이어서 ..

언어 & 프레임워크/Go

Go: 인터페이스와 타입 단언 (Interface, Type Assertion)

인터페이스 인터페이스는 이기종간 기능을 약속하여 서로 다른 기기일지라도 오직 기능적인 관점에서 일관성을 유지하기 위해 사용한다. 같은 개발자라도 가지고 있는 기술에 따라 기술 스택이 달라지지만, 코딩이라는 기능은 가질 수 있는 것처럼 말이다. 인터페이스는 아래와 같이 정의하는데, Go 에서는 구조체에 정의하는 메서드에 대해 인터페이스를 사용하는 것을 명시하지 않는다. 인터페이스는 타입으로 선언하며 Develop 이라는 인터페이스는 코딩이라는 기능을 가질 수 있음을 말한다. 인터페이스는 실질적인 구현에 대해서는 이야기하지 않고, 오직 그 기능이 가능한 지에 대해서만 신경쓴다. type Develop interface { Coding() } 조건에 만족하려면 인터페이스를 만족하기 위한 조건은, 메서드를 가진..

언어 & 프레임워크/Go

Go: 구조체 (메서드, 임베딩, 캡슐화)

Go 에는 클래스가 없다. 개념적으로 객체라는 단어를 거의 사용하지 않는다. 다만 C언어처럼 구조체라는 존재가 있다. 구조체는 클래스와 유사하지만 전통적인 객체지향 프로그래밍의 형태보다는 Go 언어에 맞는 프로그래밍 방식이 요구된다. 객체지향에서 언급하는 상속과 캡슐화를 하는 것은 가능하지만 그 방법이 다른 언어와는 상당히 다르다. 기존 객체지향에서 사용하는 extends, public, protected, private 와 같은 키워드가 존재하지 않으며, this 키워드가 없어서 혼란스러울 일이 없다. 타언어를 사용하다보면(특히 자바스크립트) this 가 무엇을 가르키는지 소스코드에 명시가 되어있지 않기 때문에 헷갈리는 경우가 많은데, Go 에서는 명시하기 때문에 그럴 일이 없다. 구조체 구조체는 클래..

정상우
'언어 & 프레임워크/Go' 카테고리의 글 목록 (3 Page)