2024-01-28(일)은 두 번째 묘공단 Go 스터디 날이다.
이를 위해 3장부터 11장까지 공부하고 포스팅을 하고 있는데
지금 9장부터 11장까지가 if문, switch문, for문이다.
if, switch, for문의 목적
대부분의 언어에는 if, switch, for문이 있다.
왜 많은 언어가 같은 개념을 공유하는가 싶어 생각해 보면
이들은 프로그램의 흐름을 제어하는 예약어다.
이러한 구문은 프로그램이 다양한 조건에 따라 다른 작업을 수행할 수 있도록 한다.
객체지향언어에서는 이들로 조건과 반복을 사용하여 '객체의 상태'를 조작하고, 객체 간의 상호작용을 제어한다.
절차지향언어에서는 '프로그램의 실행 흐름'을 제어하며, 함수나 절차의 실행을 조건에 따라 분기하거나 반복 실행한다.
그래서 왜 이런 개념들이 사용되고 있는 건가?
나는 물리적인 디지털논리회로 때문이라 생각한다.
논리회로는 논리 게이트(AND, OR, NOT 등)로 구성되어 있으며, 이는 프로그래밍의 조건문과 유사한 역할을 한다.
조건문은 논리 연산을 기반으로 결정을 내리며, 이는 논리회로에서의 논리 연산과 직접적인 연관이 있다.
즉, 프로그래밍의 조건문은 논리회로의 원리를 추상화하여 표현한 것인 거다.
이렇게 사용하기 쉽게 추상화된 표현이 없었다면 개발자는 물리적 연산을 직접 구현하면서 하드웨어 로직을 직접 다루어야 하겠지.
그것이 어셈블리(또는 그 보다 아래 수준의 언어==기계어) 같은 것일 거고.
if문 설명 들어가야 하는데 궁금해서 좀 더 찾아 보았다.
아래 내용을 한 번 읽어 보면 좋을 것 같다.
기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 가장 기본적인 언어입니다. 이는 컴퓨터의 CPU가 직접 해석할 수 있는 이진 코드(0과 1로 구성된)로 되어 있습니다. 각 기계어 명령어는 CPU에 특정 작업을 수행하도록 지시합니다.
기계어 코드는 사람이 직접 작성하거나 읽기에는 매우 어려우며, 보통은 고수준 프로그래밍 언어로 작성된 코드가 컴파일러나 인터프리터에 의해 기계어로 변환됩니다.
간단한 기계어 코드 예시를 직접 제공하는 것은 어렵습니다. 왜냐하면 기계어 코드는 컴퓨터의 CPU 아키텍처마다 다르고, 이진 형태로 표현되기 때문입니다. 예를 들어, 간단한 덧셈 연산을 수행하는 기계어 코드는 특정 CPU 아키텍처에 따라 완전히 다른 이진 코드로 표현될 수 있습니다.
그러나 개념적인 이해를 돕기 위해, 어셈블리 언어로 작성된 간단한 코드 예시를 보여드릴 수 있습니다. 어셈블리 언어는 기계어에 매우 가깝지만, 사람이 이해할 수 있는 기호와 명령어를 사용합니다:
assembly
MOV A, 5 ; A 레지스터에 5를 로드
ADD A, 3 ; A 레지스터의 값에 3을 더함 (결과적으로 A는 8이 됨)
위 예시는 매우 단순화된 형태이며, 실제 어셈블리 언어 코드는 사용하는 CPU 아키텍처에 따라 다르게 작성됩니다. 기계어로 변환되면, 이 코드는 해당 CPU가 이해할 수 있는 이진수로 표현됩니다.
다시 if문 이야기로 돌아가자.
if문 기본 사용법
Go에서 if문은 조건을 평가하고 해당 조건이 true일 때 코드 블록을 실행한다.
if 조건 {
// 조건이 true일 때 실행할 코드
}
그리고 && 또는 ||
&& 연산자는 두 조건이 모두 true일 때 true를 반환한다.
|| 연산자는 두 조건 중 하나라도 true일 때 true를 반환한다.
if 조건1 && 조건2 {
// 두 조건이 모두 true일 때 실행
}
if 조건1 || 조건2 {
// 두 조건 중 하나라도 true일 때 실행
}
중첩 if
if문 내부에 다른 if문을 사용하여 조건을 더 세분화할 수 있다.
if 조건1 {
if 조건2 {
// 조건1과 조건2가 모두 true일 때 실행
}
}
if 초기문; 조건문
Go에서는 if문에 초기문을 포함시킬 수 있으며, 이는 if문 내에서만 유효한 변수를 선언하는 데 사용된다.
if 초기문; 조건 {
// 조건이 true일 때 실행
}
if x := computeValue(); x > 10 {
fmt.Println("x는 10보다 큽니다.")
}
Tucker의 Go 언어 프로그래밍 9장 끝!
10장 갑시다~~~