Programming/TIL
-
티스토리 블로그에 마크다운 콜아웃(Callout) 넣어주기Programming/TIL 2024. 11. 25. 18:56
티스토리 블로그에서 Github 스타일의 마크다운 콜아웃(경고/주의 상자)을 구현하는 방법을 설명합니다. HTML 구조 분석부터 자바스크립트 DOM 조작, CSS 스타일링, 웹 접근성 개선까지 단계별로 알아봅니다.개요Github에서 README 파일을 읽다 보면 이런 멋있는 경고 상자를 볼 수 있습니다. 프로그램 사용 시 주의사항이나 설정 방법, 사용 꿀팁 등을 강조할 때 주로 사용되곤 하는데요.이는 Github Flavored Markdown에서 지원하는 기능입니다.표준 마크다운 문법에 여러 가지 확장을 더한 것이죠.아래와 같은 표준 마크다운 인용블록에> 나는 생각한다 고로 나는 존재한다. - ChatGPT나는 생각한다 고로 나는 존재한다. - ChatGPT이런 식으로 [!NOTE]를 앞에 붙이면 위에..
-
C언어로 알아보는 객체 지향 프로그래밍: 가상 함수 테이블(vtable)과 메서드 구현Programming/TIL 2024. 11. 23. 22:43
C언어로 구조체와 함수 포인터를 이용해 객체 지향 프로그래밍을 구현하는 방법을 설명합니다. 객체 지향 언어의 메서드를 모방하고, 가상 함수 테이블(vtable)을 이용한 동적 함수 호출을 구현하는 과정을 다룹니다. C++의 정적/동적 바인딩, Java의 추상 메서드 등 다양한 언어의 메서드/인터페이스 구현 방식과 비교하며 객체 지향의 원리를 설명합니다.개요요전에 제어의 역전(Inversion of Control) 이해하기 1부: 객체 지향 이전의 C언어 구현이라는 글을 썼습니다.2부는 "객체 지향 프로그래밍에서의 제어의 역전"을 설명할 계획이었는데요.글의 내용을 고민하던 와중, 이걸 객체 지향 언어 대신 C언어로 설명해 볼 순 없을까?라는 생각이 들었습니다.그런데 글을 쓰다 보니 내용이 점점 산으로 가고..
-
제어의 역전(Inversion of Control) 이해하기 1부: 객체 지향 이전의 C언어 구현Programming/TIL 2024. 11. 7. 22:56
C언어의 함수 포인터를 활용하여 제어의 역전(IoC, Inversion of Control)의 기본 개념과 구현 방법을 설명합니다.Spring이나 객체 지향 프로그래밍의 고급 개념 없이, C언어의 qsort() 함수 예제를 통해 콜백 메커니즘의 동작 원리와 장점을 살펴봅니다. 함수 포인터를 활용한 코드 결합도 낮추기와 재사용성 향상 방법을 다룹니다.개요최근 너무 흥미로운 블로그 글을 발견했습니다.제어의 역전을 C언어 예시로 설명하고, 이를 객체 지향적 관점으로 확장하며 설명하는 글이었는데요.읽으면서 이해한 내용을 정리하고, 글 소개도 할 겸 글을 써보기로 했습니다.본 글은 해당 블로그 글을 기반으로 제어의 역전을 설명합니다.설명과 코드 예시는 블로그 글을 참고하되, 최대한 이해하기 쉽도록 제 나름의 설명..
-
C언어에서의 다차원 데이터 메모리 할당 방법Programming/TIL 2024. 10. 16. 01:02
C언어에서 다차원 데이터, 혹은 다차원 배열의 메모리 동적 할당 방법을 다룹니다.터를 이용한 기초적인 방법부터, 일차원으로 메모리를 할당하는 선형 방식, 선형 데이터에 이차원 배열의 인터페이스([][])를 사용하는 방법, VLA(Variable Length Array)를 사용하는 방법 등 각 방식의 장단점을 이차원 데이터를 할당하는 예시 코드와 함께 설명합니다.개요프로그래밍을 하다 보면 2차원 이상의 데이터 구조를 다뤄야 할 때가 있습니다.게임의 맵 정보나 픽셀로 이루어진 이미지 데이터, 행렬과 테이블 데이터 등이 대표적입니다.이런 다차원 데이터는 컴파일 시점에 크기를 알 수 없는 경우가 많습니다.게임 맵 크기가 실행 중에 결정되거나, 처리할 이미지의 해상도를 사전에 알지 못하는 경우가 대표적이죠.이럴 ..
-
SSH로 원격 서버 안전하게 접속 관리하기Programming/TIL 2024. 9. 4. 17:22
기본적인 ssh 연결 방법부터 보안을 강화하는 방법까지 실제 홈서버를 만들면서 알아본 내용을 초보자 관점에서 설명합니다.비밀번호 인증 대신 ssh 키 인증을 사용해야 하는 이유와 설정 방법, sshd_config 파일을 통한 보안 설정 등 인터넷상으로 ssh 연결이 가능하게끔 설정할 때 필요한 내용을 포함합니다.그리고 Tailscale VPN을 이용한 ssh 연결 방법을 소개합니다.Intro요즘 짬짬이 노노그램 퍼즐 서버를 개발 중입니다. 간단한 REST api 서버입니다.서버는 예전에 쓰던 노트북을 서버 PC로 운용할 예정입니다. 힌지가 박살 나서 제대로 여닫는 데 10분 이상 걸리는 노트북입니다. 작동은 되니까 전원 물려놓고 서버용으로 방구석에 모셔놓기에는 안성맞춤이지요. 한편, 고장 난 노트북 앞에..
-
배열과 포인터의 차이Programming/TIL 2024. 8. 27. 05:09
C언어에서 배열과 포인터의 차이점을 상세히 설명합니다.2차원 배열을 이중 포인터로 전달할 때 발생하는 문제와 배열 붕괴(decay) 현상을 통해, 배열과 포인터가 실제로는 다른 개념임을 설명합니다.Intro배열을 포인터로 넘겨주기가로 x 세로 크기 2차원 퍼즐 게임을 만든다고 해봅시다. 일단 아래와 같이 18줄 정도 코드를 작성했습니다.struct puzzle{ int n_rows; int n_cols; int **board;};void print_puzzle(struct puzzle *p){ for (int i = 0; i n_rows; i++) { for (int j = 0; j n_cols; j++) { printf("%d ",..