2026. 4. 24. 04:02ㆍ카테고리 없음
본 글은 코딩에 대한 아주아주아주 기초중의 기초가 있다는 걸 가정하고 작성했다.
"이산"수학은 우리가 프로그래밍에서 사용하는 Integer, 즉 정수같은 연속되지 않고, 뚝 떨어지는 수들을 다룬 수학이다.
반대로, float같은 연속적이고 뚝 떨어지지 않는 수들을 다룬 수학은 미적분 같은걸 배우는 연속수학이다.
이렇게만 들으면 무슨 말인지 잘 이해하기 어려울거다.
이 이산수학은 과학이나 공학에서 응용의 핵심으로 쓰이는 수학으로,
현실에 존재하는 여러 복잡한 문제들을 효과적으로, 논리적으로 해결하기 위해 존재한다.
공학과 수학 교집합인 학문이라고 생각하면 편하다.
그럼 이산수학은 어떻게 문제를 해결할까?

일반적으로 위 사진과 같은 문제 상황을 인지 > 문제를 추상화 > 문제를 수학적 모델링 해야한다.
차근차근히 알아보자(문제 상황을 인지하는거는 굳이 알아보지 않겠다.)
1. 추상화
이산수학에서의 추상화는 우리가 흔히 생각하는 아래 사진과 같은 미술에서의 추상화와는 다르다.

영어로는 Abstraction 이라고도 부르는 이 추상화는 C++ 창시자인 비야네 스트로스트룹에 의해 아래와 같이 정의 되었다.
"구현 세부 정보를 숨기는 일반 인터페이스를 지정하는 행위"

음.. 너무 어려우니 이걸 좀 풀어서 설명하면, 아래 사진과 비슷한 느낌이다.

더 쉽게 정의 하자면
추상화란,
문제 해결에 필요한 요소를 제외한 모든 요소를 제거하는 과정 또는 문제의 핵심만 남기는 과정을 의미한다.
프로그래밍에서 대표적인 추상화의 예시는 프로그래밍 언어이다.
우리는 0101 같은 바이너리를 이용하여 코딩을 하지 않는다.

바이너리들은 ISA라는 것에 의해 정의되어, 우리는 이를 쓰기 쉽게 영어 단어들로 추상화한 프로그래밍 언어로 코딩을 한다.
(ISA가 뭔지는 굳이 알필요 없다.)
문제가 이 추상화를 걸쳐서,
이제 이걸 토대로 실제로 연산이 가능한 수학적 구조로 매핑하는 과정이 필요하다.
이걸 수학적 모델링이라고 부른다.
2. 수학적 모델링
수학적 모델링이란,
수학적 구조로 매핑시켜 체계적으로 문제를 해결하는 방법론
이다.
이것도 좀 쉽게 풀어서 설명하자면, 수학적으로 계산이 가능하도록 매핑하는거라고 할 수 있다.
이산수학 교재에서는 이 수학적 모델링이 다음 3가지 요소로 이루어진다고 명확히 정의한다.
- 주어진 문제의 상황과 배경 파악
- 주어진 문제와 수학적 구조와의 매핑
- 수학적 기초 개념을 이용한 문제 해결
이게 무슨 말인지 우리가 겪을법한 일상적인 문제에 적용해 보자.
"1개에 1,000원인 사과 x개와 1개에 2,000원인 배 10개를 사면, 총 30,000원일 때 사과를 몇 개 샀는지 구하시오"
라는 문제가 주어졌다고 가정해 보자.
- 주어진 문제의 상황과 배경 : 과일 가게에서 한정된 예산으로 사과와 배를 사는 일상적 상황을 파악한다.
- 주어진 문제와 수학적 구조와의 매핑 : 현실의 상황을 컴퓨터가 풀 수 있게 아래와 같은 '방정식'이라는 구조로 변환(매핑)한다. 1000x + (2000 * 10) = 30000
- 수학적 기초 개념을 이용한 문제 해결 : 수식을 계산하여 x = 10이라는 정답을 도출해 낸다.
이처럼 현실의 문제를 계산 가능한 식으로 세우고 답을 내는 전체 과정이 수학적 모델링이다.
우리가 방금 든 예시는 '방정식'을 썼지만,
보통 이산수학에서는 이를 그래프나 명제, 진리표 같은 이산적인 구조로 표현하여 매핑한다.

지금까지의 과정을 요약하자면,
이산수학은 불연속적이고 딱 떨어지는 수를 다루는 수학이고,
이산수학은 현실의 문제를 풀기위해,
문제의 핵심만 남기는 추상화를 하고,
이걸 계산 가능한 수식으로 표현하는 수학적 모델링을 하는 과정을 거친다.
라고 할 수 있다.
이러한 이산수학은 컴퓨터 과학 분야의 수학적 바탕이라고 할 수 있는 자료구조, 알고리즘, 운영체제 등을 확립하고,
최근에 대두된 인공지능의 이론과 활요의 바탕이 되었기에, AI를 포함한 CS 분야에서 매우 중요한 학문이라고 할 수 있다.

롤로 따지면 cs막타 와 같은 영역이다.
이제 이 이산수학의 문제 해결 방식을 더 자세하게,
이산수학에서 문제 해결을 위해서 어떤 효율적인 방법들을 쓰는지와
효과적인 모델링 방법에 대해 알아보겠다.
3. 문제 해결을 위한 효율적인 방법
이산수학은 결국 문제를 컴퓨터나 기계로 얼마나 효율적으로 푸는지에 관한 학문이기에,
아래와 같은 흐름으로 좀 더 효율적으로 문제를 풀 수 있다.
- 문제의 기본 개념과 원리를 파악하여 아이디어를 스케치함
- 다양한 관점으로 문제의 핵심에 접근함
- 어렵게 보이는 문제를 단순화시키는 방법을 점검함
- 자유로운 생각으로 문제 해결의 실마리를 이끌어냄
- 복잡한 문제를 여러 부분으로 잘게 나누어 해결함
- 모델링의 방법으로 문제를 해결함
이걸 현실에 SDLC에 적용해서 예시를 들면,
- 클라이언트의 요구사항을 듣고, 회의실 화이트보드에 전체 시스템이 굴러갈 밑그림을 그리는 초기 기획
- "이걸 OOP로 짤까? 데이터베이스는 RDB로 설계할까?" 등등 어떤 기술과 관점으로 문제를 풀지 구조를 고민
- 프로그램에 꼭 필요한 핵심 속성만 뽑아내어 Class로 설계
- 뼈대가 잡힌 상태에서 "아, 여기서는 이런 루프문을 돌리면 되겠다" 같이 코딩의 구체적인 로직을 떠올림.
- 수만 줄짜리 스파게티 코드로 짜지 않고, 유지보수가 쉽도록 여러 개의 독립적인 함수나 컴포넌트로 잘게 쪼갬.
- 잘게 쪼개진 아이디어들을 실제 컴퓨터가 연산할 수 있는 수학적 구조(방정식, 이진 논리, 그래프 등)로 완벽하게 매핑하고, 최종 코드를 완성하여 실행
이라고 할 수 있다.
4. 효과적인 문제 해결 모델링
이제 이걸 모델링 과정에서 보면, 아래의 6단계가 나온다.
- 1단계 [주어진 문제] : 해결해야 할 문제 상황이 주어짐
- 2단계 [아이디어 스케치] : 전제 조건과 상황에 대해 아이디어를 스케치함
- 3단계 [추상적 모델 구상] : 불필요한 것을 단순화하여 모델을 구상함 (추상화)
- 4단계 [수학적 모델링] : 추상적 모델을 수학적 구조에 매핑함
- 5단계 [문제 풀이 및 적용] : 계산 결과를 원래 문제에 적용해 봄
- 6단계 [해결] : 문제가 해결됨
이거는 그냥 외워두고 앞으로 쓰는게 좋을 것 같다.