Dev
-
go 언어에서 deep copy 사용Dev 2025. 3. 24. 08:02
Go 언어는 대부분 값 타입(value semantics)이 기본이지만, 슬라이스, 맵, 포인터, 구조체 포인터 등을 다루다 보면 얕은 복사(shallow copy)로 인한 예기치 않은 공유 문제가 발생할 수 있어요.이럴 때 deep copy(깊은 복사)가 필요해집니다. ✅ 언제 Deep Copy가 필요한가?🔹 1. 공유된 메모리로 인한 부작용을 피하고 싶을 때슬라이스나 맵은 참조 타입이기 때문에 복사해도 같은 메모리 영역을 가리킵니다.이를 수정하면 원본 데이터도 함께 변경되죠.original := []int{1, 2, 3}copy := originalcopy[0] = 100fmt.Println(original) // [100 2 3] ← 원본이 변경됨!이런 부작용을 막기 위해서는 deep copy로 ..
-
Go 언어에서 Concurrency (동시성) 과 Parallelism (병렬성)Dev 2025. 3. 24. 00:06
🧪 예제 1: Concurrency (동시성) – goroutine 사용package mainimport ( "fmt" "time")func printSlow(text string) { for i := 0; i 🔍 실행 결과 (예상)main 0goroutine 0main 1goroutine 1...main() 함수는 printSlow("main")을 실행하면서동시에 printSlow("goroutine")은 goroutine으로 동시 실행됨한 CPU 코어에서 context switching 하면서 동시성처럼 보임→ 실제로는 빠르게 번갈아 가며 실행하는 concurrent behavior 🧪 예제 2: Parallelism (병렬성) – runtime.GOMAXPROCSpackage mainimpo..
-
Go 언어 기원 및 설계 철학Dev 2025. 3. 20. 21:37
Go 언어는 2007년에 Google에서 시작된 프로그래밍 언어로, 로버트 그리즈머(Robert Griesemer), 롭 파이크(Rob Pike), 켄 톰프슨(Ken Thompson)이 주도하여 개발했다. 공식적으로는 2009년에 오픈 소스로 공개되었다. Go 언어의 기원 (배경) Go 언어는 Google 내부에서 대규모 시스템을 개발할 때 겪던 컴파일 속도의 저하, 복잡한 코드베이스, 병렬 처리의 어려움 등을 해결하기 위해 만들어졌다. 기존의 C++과 Java 같은 언어들은 강력하지만, 빌드 시간이 길고 코드가 복잡해지는 문제가 있었다. 이러한 문제를 해결하면서도 단순하고 효율적인 시스템 프로그래밍 언어를 만들기 위해 Go가 탄생했다. 특히 다음과 같은 요구 사항을 충족하기 위해 개발되었다. • 빠른 ..
-
Go에서 함수와 상수 이름의 시작 규칙 (대문자 vs. 소문자)Dev 2025. 3. 3. 21:58
Go 언어에서는 함수, 변수, 상수, 구조체 이름이 대문자로 시작하는지, 소문자로 시작하는지에 따라 접근 범위(Scope)가 결정됩니다.1. 대문자로 시작 (Exported, 외부 패키지에서 접근 가능)대문자로 시작하는 이름은 패키지 외부에서도 접근 가능합니다.즉, 공개(Exported)된 함수, 변수, 상수, 구조체가 됩니다.이 방식은 다른 패키지에서 사용될 것이 예상되는 경우에 사용됩니다.✅ 예제 (대문자로 시작, Exported):package mypackage// PublicFunction can be accessed from other packages.func PublicFunction() { fmt.Println("This is a public function.")}// PublicCon..
-
Go 언어의 Goroutine이란?Dev 2025. 3. 2. 19:02
Goroutine은 Go에서 병렬(동시성) 실행을 지원하는 경량 스레드(Lightweight Thread)입니다.✅ 주요 특징:Go 런타임이 관리하는 User-Level Thread (사용자 수준 스레드)OS 스레드보다 가벼움 (수천 개의 Goroutine 생성 가능)자동 스케줄링 지원 (M:N 스케줄링)go 키워드를 사용하여 생성됨package mainimport ( "fmt" "time")func sayHello() { fmt.Println("Hello, Goroutine!")}func main() { go sayHello() // Goroutine 생성 time.Sleep(time.Second) // 메인 함수가 종료되지 않도록 대기} 📌 Goroutine은 User-Level Thread인가?1..
-
go언어에서 Java의 클래스, 속성, 메소드는 어떻게 구현이되?Dev 2025. 3. 2. 12:19
Go 언어는 Java와 같은 전통적인 객체지향 언어와는 다르게 클래스(Class) 개념이 없습니다. 대신, 구조체(Struct), 메서드(Method), 그리고 인터페이스(Interface) 를 활용하여 객체지향적인 프로그래밍을 구현할 수 있습니다. ✅ 1. Java의 클래스(Class) → Go의 구조체(Struct)Java에서는 class 키워드를 사용하여 클래스를 정의하지만, Go에서는 struct를 사용하여 데이터를 정의합니다.📌 Java 코드 (클래스 예제)public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = ..
-
yarn 주요 명령어Dev 2024. 8. 16. 06:26
1. 패키지 설치 및 관리yarn install: package.json에 정의된 의존성을 설치합니다. 이 명령어는 yarn.lock 파일을 기준으로 의존성을 설치합니다.yarn add [패키지명]: 특정 패키지를 프로젝트에 추가하고, yarn.lock 파일을 업데이트합니다.--dev 또는 -D: 개발 의존성으로 추가합니다.--peer: 피어 의존성으로 추가합니다.--optional: 선택적 의존성으로 추가합니다.yarn remove [패키지명]: 특정 패키지를 프로젝트에서 제거하고, yarn.lock 파일을 업데이트합니다.yarn upgrade [패키지명]: 특정 패키지를 최신 버전으로 업그레이드하고, yarn.lock 파일을 업데이트합니다.--latest: 메이저 버전을 포함한 최신 버전으로 업그레이..