gwontaekjoon의 등록된 링크

 gwontaekjoon로 등록된 네이버 블로그 포스트 수는 10건입니다.

[C/C++]goto는 정말 악마인가? 그럼 근본은? [내부링크]

goto쫄지 말고 써요 내가 존경하는 프로그래머의 유튜브 썸네일이다. 많은 c언어 입문서 혹은 꼭 c언어가 아니더라도 goto문을 지원하는 언어의 레퍼런스를 보면 항상 goto의 사용을 금지하는 말을 많이 한다. 나도 맨처음엔 "그래. 절차지향 언어인 c언에어서만큼은 goto는 악마가 맞아" 며칠전까지만 해도 이게 내 생각이였다. 하지만 요즘 POCU 아카데미를 수강하며 c언어를 제대로 다시 배워보는 과정에서 나의 생각은 바뀌었다. "goto... 잘만 쓰면 천사인데?" 이것이 나의 바뀐 생각이다. 내가 왜 이렇게 생각이 바뀌었는지 말하기 전에 먼저 goto가 왜 악마라고 불리었는지에 대해 알아보자. 재사용 가능한 사진을 불러오느라 화질은 양해.. 자 여기보면 포크에 잘 꼬인 스파게티 사진이다. 갑자기 goto문에서 스파게티가 웬 말이냐? 이유는 goto의 악마같은 성질을 말할 때 스파게티를 이용한다. 스파게티 코드 goto를 적절하지 않게 남발하다 보면 코드의 진행 순서가 위로 갔

[이산수학]컴퓨터가 음수를 표현하는 방법 (feat. 컴퓨터는 뺄셈을 못해요. 컴퓨터가 뺄셈을 구현하는 방법..폰노이만의 대단함) [내부링크]

저번 포스팅에서 컴퓨터가 왜 2진수를 쓰는지에 대해서 간단히 포스팅해보았다. 컴퓨터는 숫자들 뿐만 아니라 안에 있는 모든 데이터를 결국 이진수로 저장하고 처리한다. 그런데 컴퓨터가 쓰는 숫자들이 무조건 양수만 있진 않을 것이다. 그렇다면 컴퓨터는 음수를 어떻게 표현하고 처리할까? 여러가지 방식이 있었지만 이제는 한 가지 방식으로 고정이라고 보면 되고 더 나아가서 컴퓨터가 뺄셈을 구현하는 방식을 알아보자. 부호 절댓값 표기법 0은 과연 +일까요 -일까요~? 부호 절댓값 표기법이 컴퓨터가 음수와 양수를 표현하는 방식 중 제일 초기방식이라고 보면 된다. 또한 이해하기도 제일 쉽고 나중에 필요한 "보수"라는 개념도 없어서 간단하다. +9,-9를 부호 절댓값 표기법으로 표현한 방식 위 사진에서 알 수 있듯이 부호 절댓값 표기법은 정수를 표현하는 이진수 비트 패턴에서 가장 최상위 비트인 MSB만으로 음수 양수를 판단하는 방식이다. 양수는 0 음수는 1 부호 절댓값 표기법은 이처럼 간단한데 지금

[이산수학]컴퓨터는 실수(소수)계산을 정확하게 못해요.(feat. 부동소수점, IEEE754) [내부링크]

이번 포스팅도 제목을 보면 알 수 있듯이 저번 포스팅과 이어서 컴퓨터의 특성으로 인한 한계점을 다뤄볼 것이다. 생각해 보면 우리가 흔히 아는 소수는 0.1, 0.5처럼 소수점 뒤로 끝이 있는 수, 유한소수가 있지만 0.123123123..., 0.4323412312314...처럼 끝이 없는 무한소수도 있다. 뿐만 아니라 0.1과 0.2 사이에는 수많은 소수들이 존재한다. 하지만 프로그래밍을 조금만 해보면 데이터를 저장하는 자료형에는 크기가 정해져있고 아무리 자료형이 크더라도 결국 컴퓨터의 물리적인 저장 장치의 한계로 인한 문제점이 있을 것이다. 또한 2진수로 돌아가는 컴퓨터가 소수를 표현하는 방법도 음수 표현 방법처럼 여러 과정을 거쳐 발전했을 것이다. 이번 포스팅은 컴퓨터의 실수 계산이 어떻게 이루어지는지 알아보기 위하여 2진수로 실수를 어떻게 나타내는지부터 현대 컴퓨터로 오기까지의 어떠한 발전이 있었는지 컴퓨터의 실수에 관하여 알아보자. 10진수 실수 -> 2진수 변환 음수 표현

[C/C++]함수는 쌓였다가 없어집니다 - 스택프레임을 알아보자. (feat. 어셈블리어, 스택은 거꾸로,쓰레기값,Chatgpt!!) [내부링크]

메모리 4대 구조 이번 포스팅에선 갑자기 평소와는 다르게 그림 하나 달랑 던져주고 시작한다. 컴퓨터공학과 학생들이라면 수업시간에 한번 쯤은 봤을 그림이다. ??? : 택준아, 메모리 4대 구조! 나 : 코드 데이터 힙 스택! 예전에 훌륭했던 학교 선배가 메모리 구조를 물어보면 바로 튀어나오라고 강조했던 내용이다. 굳이 c언어를 배울 때가 아니더라도 다들 식상할 정도로 아래는 알고 있을 것이다. 코드 - 프로세스의 실행될 코드 데이터 - 정적,전역변수 힙 - 동적할당 스택 - 지역변수, 함수 이중에서 오늘은 그림에서 빨간색으로 강조한 스택에 대해서 알아보자. 스택이 왜 스택입니까...? 메자이... 사실 롤 안함 스택이라고 한다면 사실 자료구조를 공부한 학생들은 하나같이 LastInFirstOut(후입선출)방식의 자료구조 '스택'을 생각할 것이다. 엄멀히 따지면 같은 것은 아니지만 동작원리는 비슷하다. 각 함수는 호출이 되면 스택 프레임이라는 자신만의 공간을 스택 메모리에 일부분 차지

[C/C++]매개변수에 배열을 넘기면 그게 진짜 배열일까?(feat.포인터,sizeof,다시 한번 스택) [내부링크]

C/C++로 짜여진 여러 코드를 보다보면 함수의 매개변수에 배열을 넣는 코드들을 볼 수 있을 것이다. 예를 들면, #include <stdio.h> // 정수형 배열을 인자로 받는 함수 void print_array(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); // 배열 크기 계산 print_array(arr, size); // 배열 전달 return 0; } 해당 코드는 정수형 배열을 넘겨서 배열의 요소를 출력하는 정말 간단한 코드다. 물론 배열을 함수에 전달 시 배열의 크기를 미리 계산해서 같이 넘겨준다. (배열을 함수에 전달시 배열의 크기를 미리 계산하는 이유는 나중에 나온다.) 그런데 저번 스택 프레임에

두 달이 지난 후 써보는 데브코스 리눅스 2기 합격 후기 및 회고록 [내부링크]

정말 오랜만에 블로그에 글을 쓰는 것 같다.. 원래 마지막으로 글을 올린 후에 주기적으로 계속 쓰려고 했는데 코로나에 걸려서 후유증을 포함해서 몇 주간 앓고 학교 시험에 라섹까지... 그동안 많은 일이 있었지만 무엇보다 데브코스 합격한게 제일 큰 것 같다. 평소 로우레벨 개발 및 커널 쪽 개발을 배우고 싶었지만 요즘 대한민국 개발 시장의 특성 상 웹과 앱에 치중이 되어 전문적으로 배울 기회조차 없었던 상황이라 나에겐 좋지 않은 상황이였다. 그러던 중 대학교 3학년 2학기가 되며 슬슬 3학년 2학기 ~ 4학년 1학기에 시작할 부트캠프를 찾던 중 믿을만 한 프로그래머스에서 데브코스 부트캠프로 리눅스 커널 과정을 모집한다 하여 꼭 붙고 싶었다. 여기서 사실 1기 데브코스 리눅스 커널 과정부터 이러한 과정이 있다는 것을 알고있었지만 그 때는 이미 신청을 받은지 좀 기간이 된 상황에다 국민내일배움카드를 발급하기 전이라 카드 발급까지 기다리려면 이미 신청이 마감되는 상황이라 2기를 기다리고 있

프로그래머스 데브코스 리눅스 트랙 2기 우수 수료 후기 [내부링크]

바로 이전 포스팅에서 bash프로세스에 관한 과제를 올릴 시에도 언급하였지만 2023-10-13일자 시작, 2024-03-09를 마지막으로 데브코스 리눅스 커널 과정을 끝내고 이수하였다. 나름 얻어간 것도 많지만 아쉽다면 과정 자체가 많이 어려워서 못한 과제도 많았고 개념적으로도 부족한 점이 있어 수료 후에도 6개월 동안 제공 받았던 강의를 들을 수 있는 기간이 있어서 중요한 부분을 다시 복습하려고 한다. 수료식 당일 날에 개인적인 사정으로 좀 늦게 참가하였다. 슬랙으로 공지된 사항이였지만 우수 수료생 시상과 멘토님들의 Q/A가 예정되어 있었는데 늦참으로 인하여 우수 수료생 시상을 보지 못했다. 멘토님들의 Q/A가 끝나고 수료식이 끝나버려서 우수 수료생이 누군지도 모르는 상황이라 궁금하여 매니저님께 여쭤봤는데 내가 우수 수료생으로 뽑혔다고 하여 놀랐다. 우수 수료생은 총 4명으로 마지막 프로젝트 주간에 전체 수강생을 4팀으로 나눠 각 팀에 멘토님이 배정되었는데 멘토님들께서 각 팀에

bash프로세스는 유저 프로세스일까 커널 프로세스일까?(feat. Trace32, crash utility) - 프로그래머스 데브코스 과제 [내부링크]

본 내용은 프로그래머스 주관 부트캠프 - 데브코스 리눅스 시스템 및 커널 전문가 트랙에서 진행했던 과제임을 밝힙니다. 또한 해당 과제에서 사용한 리눅스 커널 덤프는 서형진 멘토님의 도움과 trace32라이센스 또한 해당 트랙에서 제공받음을 알립니다. 우리가 소스코드를 빌드 후 나온 프로그램을 실행 시켜서 메모리에 올리면 그것을 '프로세스'라고 부른다. 여기서 프로세스는 두 가지 분류로 나뉘는데 바로 '커널 프로세스' '유저 프로세스' 이 두 가지의 프로세스가 분류되는 것은 프로세스의 권한에 차이가 있을 것이다. 또한 라이프 사이클로 따져도 커널 프로세스는 대부분 백그라운도 실행되며, 유저 프로세스는 수시로 생성과 소멸이 반복되며 우선순위도 커널 프로세스가 유저 프로세스보단 훨씬 높다. 사진처럼 유저 공간의 프로세스는 커널 공간에게 시스템 콜이라는 인터페이스로 여러 권한들을 요청한다. 그런데 여기서 프로세스가 유저 공간에서 돌아가는 유저 프로세스인지 커널 공간에서 돌아가는 커널 프로세

[이산수학]다양한 진법간의 변환 (feat.컴퓨터는 왜 2진수를 써요?, 16진법은 왜 배워요..?) [내부링크]

일반적으로 고등학생 때까지는 수 표기 방식을 10진법까지만 보다가 컴퓨터, 전기전자, 소프트웨어 공학 등 it관련 학과의 전공생이라면 2진법, 8진법, 16진법 같이 사람에겐 익숙하지 않은 수 표기 방식을 배울 것이다. 배울 때 마다 학생들은 '왜? 10진법을 제외한 다른 것들도 배우는 것인가' 에 대한 의문을 해결하지 않고 이산수학 수업 듣고 시간이 꽤 지나면 각 진법간의 변환하는 방법도 잊어버리게 된다. 이번 포스팅을 통하여 어렵지 않은 내용이지만 나 또한 정확히 이해하고 굳이 이러한 진법들을 배우는 이유를 정리해보겠다. 10진법 -> 2진법, 8진법, 16진법 10진법에서 다른 진법으로 변환하는 것은 소인수분해와 비슷하다. 먼저, 10진법에서 2진법으로 변환하는 예시를 들어보자면 10진수 14를 2진수로 변환하는 예시 이렇게 소인수분해 하듯이 14를 2로 계속 나누다가 최종 몫이 1이 나온다면 멈추고 빨간색 화살표 방향으로 왼쪽부터 오른쪽 방향으로 나머지를 써주면 된다. 사실

7fd3ddb038f148d8baa31fdfa3ab8958 [내부링크]

구글 검색 등록 키자드