TIL (Today I Learn)

[자율학습] 프로그래밍 언어 구성요소 학습 - GPT 프로젝트

나새끼메이커 2025. 11. 13. 19:08
반응형

지금까지 강의를 들으며 프로그래밍 언어의 체계를 학습할 필요가 있다는 것을 느꼈다.

실무 중심의 강의들은 이런 체계들을 먼저 설명해주지 않는다.

일단 닥치고 따라하고, GitHub에 있는 코드를 복사해서 붙여넣는 법을 알려준다.

 

언어는 체계다.

체계를 먼저 숙지해둔다면 그 다음은 구조를 따라 흐르는 것이기 때문에

체계를 먼저 학습하는 것이 훨씬 유리하다는 판단.

어휘가 충분하면 문법은 중요하지 않다고 생각할 수도 있겠지만,

나의 경우 문법을 충분히 익혔을 때 모르는 어휘가 나오더라도 상황을 파악하기 쉽다고 생각한다.

 

그리하여 이러한 나의 니즈에 맞춰 GPT에게 학습 커리큘럼을 짜달라고 했다.

 

 

근본 프로그래밍 커리큘럼

1. 언어의 구성요소 이해하기

프로그래밍 언어의 구성

  1. 값(value)
  2. 타입(type)
  3. 변수(variable)
  4. 연산자(operator)
  5. 표현식(expression)
  6. 문(statement)
  7. 블록(block)

2. 프로그램의 구조적 단위 이해

  • 함수(function)
  • 메서드(method)
  • 클래스(class)
  • 객체(object)
  • 모듈(파일)
  • 라이브러리(import)

3. 언어의 실행 모델 이해

예시

  • top-level은 언제 실행되는가
  • import는 어떻게 동작하는가
  • main은 왜 엔트리포인트인가
  • 지역변수/전역변수는 어떻게 메모리에 놓이는가
  • statement는 실행, expression은 평가

4. 타입 시스템 이해

  • 정적 타입 vs 동적 타입
  • 타입 추론 (var)
  • 최상위 타입 (Object)
  • nullable 타입
  • 타입 검사 (is / as)
  • 타입은 왜 존재하는가
  • 타입 = 클래스 / 타입 != 클래스 인 언어

5. 객체지향의 실제 목적 이해하기

객체 지향의 목적 = "데이터와 그 데이터가 하는 행동을 하나의 **책임 단위**로 묶는다."

  • 클래스 = 설계도
  • 객체 = 설계도로 찍힌 실체
  • 메서드 = 객체가 할 수 있는 행동
  • 필드 = 객체가 가진 상태

 

 

 

 

그리고 나는 이것을 다음과 같이 md파일로 다운받아 GPT 프로젝트에 학습시켜두었다.

 

# Dart / Flutter 근본기 학습 프로젝트 가이드

## 0. 이 프로젝트의 목적

이 프로젝트는 **실무 기능 위주의 코스가 아니라, 언어의 뼈대를 이해하는 학습 공간**이다.

- Dart / Flutter를 단순히 “돌아가게 만드는 법”이 아니라  
  **언어의 구조·개념·철학**을 중심으로 배운다.
- 실무 문법·코드 스니펫은 **전부 이 근본 개념 위에 쌓이는 것**으로 본다.
- “왜 이렇게 동작하는가”를 먼저 이해하고, “어떻게 쓰는가”는 그 위에 얹는다.


---

## 1. 핵심 용어 정리

### 1-1. 코드 구성 단위

- **값(value)**  
  숫자, 문자열, true/false 등  
  예: `3`, `"hello"`, `true`

- **타입(type)**  
  값의 종류  
  예: `int`, `double`, `String`

- **변수(variable)**  
  값을 담아두는 이름 있는 상자  
  예: `double pi = 3.141592;`

- **연산자(operator)**  
  수행할 연산의 기호  
  예: `+`, `-`, `/`, `!=`, `&&`

- **표현식(expression)**  
  **값을 만들어내는 식**  
  예: `3 + 5`, `pi * r`

- **문(statement)**  
  **실행 가능한 최소 단위**  
  예:  
  ```dart
  double pi = 3.141592;
  print(pi);
  ```

- **블록(block)**  
  `{}`로 묶인 여러 statement의 집합  
  ```dart
  {
    int a = 3;
    int b = 4;
    print(a + b);
  }
  ```

- **줄(line)**  
  에디터에서 보이는 시각적 줄.  
  statement와 1:1 대응일 필요 없음.


---

### 1-2. 함수 / 메서드 / 클래스 / 객체 / 타입

- **함수(Function)**  
  소속 없는 독립 실행 기능  
  예: `main()`, `print()`

- **메서드(Method)**  
  **객체가 가진 함수**  
  예: `"hi".toUpperCase()`, `list.add(3)`

- **클래스(Class)**  
  객체를 만들기 위한 설계도

- **객체(Object)**  
  클래스로 만들어진 실제 실체  
  예: `Dog("초코")`, `[1,2,3]`, `"hello"`

- **타입(Type)**  
  값의 형태를 설명하는 이름  
  Dart에서는 **타입 = 클래스**


---

### 1-3. 키워드(keyword) 분류

#### 선언 키워드  
- `var` — 타입을 추론하라는 요청  
- `final` — 변경 불가  
- `const` — 컴파일타임 상수  
- `late` — 나중에 초기화

#### 객체지향 키워드  
- `class`, `extends`, `implements`, `with`, `this`, `super`, `abstract`, `factory`

#### 모듈/라이브러리 키워드  
- `import`, `export`, `part`, `library`

#### 제어 흐름 키워드  
- `if`, `else`, `for`, `while`, `switch`, `break`, `continue`, `return`

#### 예외 처리 키워드  
- `try`, `catch`, `finally`, `throw`

#### 타입 검사 키워드  
- `is`, `is!`, `as`

#### 연산자 그룹  
- 산술: `+`, `-`, `*`, `/`, `~/`, `%`  
- 비교: `==`, `!=`, `<`, `>`, `<=`, `>=`  
- 논리: `&&`, `||`, `!`  
- null 처리: `??`, `??=`, `?.`  


---

## 2. 학습 커리큘럼 개요

### 챕터 1. 언어의 7대 구성요소
- 값, 타입, 변수  
- 연산자  
- 표현식  
- 문(statement)  
- 블록(block)  
- 줄(line)과 statement의 차이  
- 예제 파일  
  - `chapter1_values_and_types.dart`  
  - `chapter1_statements_and_expressions.dart`

---

### 챕터 2. 함수와 프로그램 흐름
- 함수 정의/호출  
- 매개변수, 반환값  
- 함수 vs 메서드  
- `main()`이 엔트리 포인트인 이유  
- 예제  
  - `chapter2_functions.dart`  
  - `chapter2_functions_vs_methods.dart`

---

### 챕터 3. 클래스·객체·메서드
- 클래스 정의  
- 필드/메서드  
- 생성자  
- “타입 = 클래스” 구조  
- 예제  
  - `chapter3_class_and_object.dart`  
  - `chapter3_methods_and_properties.dart`

---

### 챕터 4. 타입 시스템
- `var` vs 명시적 타입  
- `final` vs `const`  
- `dynamic` / `Object`  
- nullable 타입  
- `is`, `is!`, `as`  
- 예제  
  - `chapter4_var_final_const.dart`  
  - `chapter4_dynamic_and_object.dart`

---

### 챕터 5. 파일·import·라이브러리 구조  
- `.dart` 파일 = 라이브러리 단위  
- import는 “문장을 가져오는 것”이 아니라, **선언을 가져온다**  
- top-level 변수/함수/클래스의 의미  
- 예제  

`pi.dart`  
```dart
double pi = 3.141592;
```

`use_pi.dart`  
```dart
import 'pi.dart';

void main() {
  print(pi * 2);
}
```

---

## 3. 프로젝트 사용 규칙

1. 모르면 먼저 **개념 위치부터 물어본다**  
   - “이건 statement야?”  
   - “이건 메서드야 함수야?”  
   - “이 키워드는 무엇을 선언하는 거지?”

2. 기능 위주 학습 금지.  
   모든 것은 먼저 **언어 구조 위에서 이해**한다.

3. 각 챕터마다 `questions.md` 파일을 만들어 실수/오해를 기록한다.

4. “왜”를 묻지 않은 코드는 쓰지 않는다.  
   - 왜 var? 왜 int? 왜 top-level? 왜 클래스 안?  
   이런 질문을 항상 던진다.

---

## 4. 학습 루틴 예시

1. 오늘 볼 챕터 선택  
2. 예제 파일 직접 수정하며 실습  
3. 막히면 다음 템플릿으로 질문  
   - “여기서 statement와 expression 구분해줘”  
   - “이 코드의 타입/메서드/함수 역할 분해해줘”  
4. 헷갈린 부분은 `questions.md`에 기록

---

## 5. 추후 확장

- Flutter 위젯 구조  
- 비동기(Future, async/await, Stream)  
- 상태관리 패턴(Provider, Riverpod 등)  
- 아키텍처(파일 구조, DI)

---

이 문서는 이 프로젝트의 “학습 규약 + 기본 구조” 역할을 한다.  
필요할 때마다 챕터와 예제 파일을 확장해가며,  
**Dart/Flutter 근본기 노트북**으로 키워간다.

 

 

 

갈 길이 멀다. 화이팅.

반응형

'TIL (Today I Learn)' 카테고리의 다른 글

1-6. 조건문, 반복문  (0) 2025.11.19
1-5. 함수  (0) 2025.11.18
1-4. Dart 프로젝트 구조 및 기본문법  (0) 2025.11.13
1-2. Windows 개발환경 세팅 (계속)  (1) 2025.11.11
1-2. Windows 개발환경 세팅  (0) 2025.11.10