프로그래밍(Basic)/Golang

    Go - GC에 대해 알아봅시다.

    GC란 가비지 컬렉션(Garbage Collection, GC)은 프로그래밍 언어가 자동으로 메모리 관리를 수행하는 메커니즘을 말합니다. 프로그램이 실행되는 동안 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 부분을 탐지하고 자동으로 해제함으로써 메모리 누수를 방지합니다. Go 언어도 가비지 컬렉션을 지원하며, 이를 통해 개발자는 명시적인 메모리 관리에 대한 부담을 덜 수 있습니다. 메모리 누수는 프로그램이 메모리를 계속해서 사용하지만 더 이상 필요하지 않은 메모리 블록이 해제되지 않는 상황을 의미합니다. Go 언어의 GC 작동 원리 가비지 컬렉션의 주요 원리는 더 이상 사용되지 않는 메모리를 식별하고 회수하는 것입니다. 이를 위해 가비지 컬렉터는 프로그램 내의 모든 객체 간의 참조 관계를 추적하..

    defer와 GC의 상관관계

    안녕하세요. 최근 질문 중에 "Go에서는 defer가 있는데 왜 GC를 사용해야 할까요?"라는 질문이 있었어요. defer와 GC는 하는 역할이 서로 다르기 때문에 '이건 무슨 내용의 질문이지?'하며 한 동안 벙쪄서 아무 말도 하지 못했죠. 그 후 그 질문에 대한 답변을 해주기 위해 공부했던 것들을 정리 해봅니다. 역시 Go에서의 defer와 가비지 컬렉터(GC)는 서로 다른 개념이였어요. 즉, 그들 간에 직접적인 관련은 없었죠. Go를 사용해보신 분들이라면 defer는 함수 내에서 특정 코드를 지연 실행시키는 데 사용되는 기능이며, 주로 리소스 정리나 오류 처리에 유용하고, 가비지 컬렉터는 메모리 관리를 자동으로 처리하여 더 이상 사용되지 않는 객체를 탐지하고 해제하여 메모리 누수를 방지해주는 도구라는..

    Go 1.20 릴리즈 요약

    1.19 이후 6개월 만의 릴리즈. 하위호환 정책으로 기존 프로그램 컴파일/실행은 문제 없음 언어에 4가지 변화 slice를 array로 변환 가능 unsafe 패키지에 SliceData, String, StringData 함수 추가 구조체의 필드값이 정의에 나타난 순서대로 하나씩 비교되도록 하고, 첫번째 미스매치에서 중단되도록 정의됨. 비슷하게 배결 값도 하나씩 인덱스 순으로 비교 Comparable 타입들이 타입 인자가 strictly comparable 하지 않은 경우에도 comparable 조건을 충족 가능 GC 데이터 구조 개선으로 메모리 오버헤드가 줄어들고 전체 CPU 성능 최대 2% 향상 그외 툴체인, 런타임, 라이브러리 구현등이 개선

    Go 1.19 릴리즈

    오늘 Go 팀은 다운로드 페이지 를 방문하여 다운로드 받을 수 있는 Go 1.19를 출시하게 된 것을 기쁘게 생각합니다 . Go 1.19는 올해 초 Go 1.18 릴리스 를 개선하였습니다. Go 1.19의 제네릭 개발은 커뮤니티에서 보고한 미묘한 문제와 코너 케이스를 해결하는 데 집중했으며 중요한 성능 향상(일부 제네릭 프로그램의 경우 최대 20%)을 제공했습니다. 문서 주석은 이제 링크, 목록 및 더 명확한 제목 구문을 지원합니다. 이 변경 사항은 특히 큰 API가 포함된 패키지에서 사용자가 더 명확하고 탐색하기 쉬운 문서 주석을 작성하는 데 도움이 됩니다. 이 변경 사항의 일부로 gofmt이 이제 문서 주석의 형식을 다시 지정하여 이러한 기능을 사용할 때 표준 형식을 적용합니다. 자세한 내용은 "Go..

    [바미] Go의 signal에 대해 알아봅시다.

    BackEnd단에서 프로그램을 Go언어로 짜다 보면 Go 프로그램이 Unix signal을 처리해 주었으면 하는 때가 있죠. 예를 들어, SIGTERM signal을 받았을 때 적절하게 서버를 종료하는 경우나 커맨드라인 도구에서 SIGINT를 받았을 때 프로세스를 멈추는 경우가 그런 경우인데요. 오늘은 채널을 이용하여 signal을 다루는 방법을 살펴보겠습니다. 코드 package main import "fmt" import "os" import "os/signal" import "syscall" func main() { sigs := make(chan os.Signal, 1) done := make(chan bool, 1) signal.Notify(sigs, syscall.SIGINT, syscall...

    [바미] Beyond OOP에 대해 알아보자.

    OOP가 나온지 20년이 되었고, 모든 개발자들이 OOP란 개념은 필수가 되었고, OOP를 해야만 하는 언어들도 많이 나타났습니다. 그 만큼 OOP는 훌륭한 개념이고, 프로그래밍 역사상 가장 훌륭한 기술이자, 가장 성공한 기술이 아닐까 싶습니다. 그럼에도 불구하고, OOP는 문제점이 점점 드러나기 시작했는데 잘 하면 좋은데 잘 하기 어렵다.는 점이죠. 이걸 잘하려면 알아야 하는 내용도 너무 많고, 숙지하고, 숙달해야 하는 부분이 너무 많기 때문이죠. 이게 단순히 지식 만으로 되지 않습니다. 이 지식을 가지고 숙달하는 과정이 필요하죠. 이 지식도 올바른 지식을 가지고 올바르게 숙달시켜야 하는데 실제 상황에서는 올바른 지식을 가진 개발자가 흔하지 않을 뿐더러 올바르게 숙달시킨 개발자도 흔치 않습니다. 그 이..

    [바미] Go - ODD의 SOLID에 대해 알아보자.

    안녕하세요. 오늘은 OOD의 SOLID에 대해 알아보도록 하겠습니다. OOD(Object-oriented design)는 Object 중심의 설계 방법 입니다. 실제 코딩하는 것보다 설계가 중요한 이유는 설계된 밑바탕이 잘 되어 있어야 그걸 기반으로 개발자들이 코딩을 할 때 잘 할 수 있는데 예전(Unix, OS2) 한 사람이 주도적으로 코딩을 했지만 현재에 와서는 혼자서 하기엔 규모가 커졌기 때문에 수 백명의 개발자들이 하나의 프로그램을 만듭니다. 그렇기 때문에 각자 자기가 맡은 부분에서 코딩을 잘 할 수 있도록 잘 나눠주고, 모듈을 잘 조율 시켜주는 사람이 아키텍쳐이죠. OOD는 그 설계를 할 때 Object중심으로 설계를 해야 좋은 코드를 짤 수 있다는 것을 말합니다. OOD에서 5가지 법칙이 있는..

    [바미] Go - Interface에 대해 알아보자2.

    안녕하세요! 지난 시간에 Interface에 대해 얘기 했었죠? 지난 시간에 이어서 Interface에 대해 알아가 보겠습니다. 지난 시간에 얘기했던 것을 정리해보면 OOP에서 Objcet란 상태와 기능을 합한거라고 했었고, 이 기능을 외부에 공개된 공개기능, 외부에 공개되지 않은 내부기능 이 있다고 했었죠? 외부 기능은 외부와 통신하는 기능이기 때문에 외부 Obejct와의 관계로 볼 수 있습니다. 이 관계를 따로 정의 해놓은 것이 Interface라고 했습니다. 그래서 이 관계를 따로 Interface에서 정의할 수 있기 때문에 Object에세 관계의 종속성을 끊었고, 이렇게 독립 시켜 놓았기 때문에 관계만 포함하고 있으면 Object A든 Object B이든 상관 없이 사용할 수 있어 확장성이 생기게..

    [바미] Go - OOP 3번째! Interface에 대해 알아보자.

    안녕하세요! 이번에는 Interface에 대해 알아보겠습니다. 여기서'Inter'라는 것은 왔다 갔다 하는 것을 의미합니다. Inter가 쓰인 말 중에 Inter change가 있고, Interaction이 있는데 Interaction은 상호작용을 말하는 것이고, Inter change는 고속도로에서 도로가 바뀌는 것을 의미 합니다. 'face'라는 것은 얼굴이라는 뜻도 있지만 면, 접촉면, 표면을 의미 합니다. 그래서 Interface라고 하면 서로 상호 작용을 하는 접촉 면을 의미하죠. 보통 UI(User Interface)를 보통 얘기하는데 어떤 게임을 할 때 UI가 좋다, 나쁘다. 이런 얘기를 하는데 UI라는 것은 게임을 할 때 키보드와 마우스의 입력과 화면상의 게임 캐릭터의 상호작용, 그러니까 ..