728x90
반응형

 

큰 문제는 작게 나누면 쉬워진다! 

컴퓨터에게 명령을 줄 때, 너무 복잡한 걸 한꺼번에 시키면 힘들어해. 그래서 우리는 큰 문제를 작은 조각으로 나눠서 해결해야 해!

이걸 우리는 문제 분해 또는 모듈화라고 해. 어렵지 않지?

 


예를 들어 볼까?

아침에 학교 가기라는 큰 일을 생각해보자!

  1. 눈 뜨기
  2. 세수하기
  3. 밥 먹기
  4. 가방 메기
  5. 학교 가기

 이렇게 작은 단계로 나누면 순서도 만들기 쉽고, 빠뜨리지 않고 차근차근 할 수 있어!

 


컴퓨터도 똑같아!

컴퓨터도 큰 문제를 작게 나누면

  • 더 정확하게 이해하고,
  • 각 단계마다 오류를 쉽게 찾을 수 있어.

프로그래밍에서는 이런 나눈 조각들을 함수(function) 라고 불러.

 


실제 코드 예시

예를 들어, 아래처럼 쓸 수 있어:

void 아침준비() {
    눈뜨기();
    세수하기();
    밥먹기();
    가방메기();
    학교가기();
}

 각 작업을 작은 함수로 나눠서 만들면, 더 보기 쉽고 고치기도 편해!


 오늘 배운 것 정리

프로그램은 너무 크면 어려워. 작은 조각으로 나누면 훨씬 쉽고 정확하게 만들 수 있어!


다음 편 예고 

이제부터는 자료형이 뭐야? 라는 주제로, 숫자, 글자, 참/거짓 같은 정보들을 컴퓨터가 어떻게 다루는지 배워볼 거야! 

728x90
반응형
728x90
반응형

연결 리스트(Linked List) 완전 이해하기

이전 글에서는 큐(Queue)에 대해 알아봤습니다.
이번에는 노드(Node)들이 포인터로 연결된 구조인 연결 리스트(Linked List) 를 자세히 정리해봅니다.

 

1. 연결 리스트란?

연결 리스트는 각 노드가 데이터와 다음 노드에 대한 포인터를 함께 저장하는 자료구조입니다.

  • 동적 크기 조정 가능
  • 삽입과 삭제가 빠름 (특히 중간 삽입/삭제)
  • 메모리에 연속적으로 저장될 필요가 없음

2. 연결 리스트의 특징

항목 설명

삽입/삭제 빠름 (O(1) - 위치만 알면)
접근 느림 (O(n) - 처음부터 순회 필요)
메모리 사용 포인터 공간 추가 필요
크기 조정 동적 크기 조정 가능

3. 연결 리스트 종류

종류 설명

단일 연결 리스트(Singly Linked List) 한 방향(다음 노드만)으로 연결
이중 연결 리스트(Doubly Linked List) 앞뒤로 양방향 연결
원형 연결 리스트(Circular Linked List) 마지막 노드가 첫 번째 노드를 가리킴

4. 단일 연결 리스트 사용 예시 (C# 기준)

C# 내장 LinkedList<T> 클래스를 사용할 수 있습니다.

 선언과 초기화

using System.Collections.Generic;

LinkedList<string> list = new LinkedList<string>();

 요소 추가

list.AddLast("노드1");
list.AddLast("노드2");
list.AddFirst("노드0");

 요소 순회

foreach (var item in list)
{
    Console.WriteLine(item);
}

 특정 노드 뒤에 삽입

LinkedListNode<string> node = list.Find("노드1");
list.AddAfter(node, "노드1.5");

 요소 삭제

list.Remove("노드2");

5. 실생활 예시로 이해하기

  • 연결 리스트 = 지하철 칸
    • 각 칸(노드)이 다음 칸을 이어서 연결됨
    • 중간 칸 추가/제거가 쉽고 빠름

6. 연결 리스트의 활용 사례

사용 예시 설명

메모리 효율적 관리 필요할 때마다 노드를 동적 생성
Undo/Redo 구현 이전 작업으로 이동할 때 양방향 연결 리스트 사용
캐시 구현(LRU 캐시) 최근 사용 데이터를 빠르게 관리

이번 글에서는 연결 리스트(Linked List) 의 개념, 종류, C# 코드 사용법을 정리했습니다.

  • 배열과 다르게 메모리에 연속 저장되지 않음
  • 중간 삽입/삭제가 매우 빠름
  • 단일, 이중, 원형 연결 리스트 등 다양한 변형이 존재

 

728x90
반응형

'개발이야기' 카테고리의 다른 글

자료구조 시리즈 8편  (2) 2025.04.22
자료구조 시리즈 7편  (2) 2025.04.22
자료구조 시리즈 5편  (0) 2025.04.21
자료구조 시리즈 4편  (0) 2025.04.21
자료구조 시리즈 3편  (0) 2025.04.21
728x90
반응형

객체지향의 첫걸음

C#을 제대로 쓰려면 반드시 익혀야 하는 두 가지: 메서드와 클래스입니다.
이 글에서는 함수를 어떻게 정의하고 호출하는지, 클래스와 객체를 어떻게 사용하는지, 그리고 기본적인 캡슐화까지 간단한 예제와 함께 정리해봅니다.


1. 메서드 (Method)란?

메서드는 어떤 동작(기능)을 수행하는 코드 블록입니다.
한 번 정의해두면, 여러 번 호출할 수 있어 재사용성이 높고 가독성도 좋아집니다.

 기본 형태

리턴형 메서드이름(매개변수들)
{
    // 실행 코드
    return 결과값;
}

 예제: 두 수 더하기

int Add(int a, int b)
{
    return a + b;
}

// 호출
int result = Add(3, 5);
Console.WriteLine(result);  // 8

 void 메서드

리턴값이 없을 때는 void를 사용합니다.

void SayHello(string name)
{
    Console.WriteLine($"안녕하세요, {name}님");
}

2.  클래스 (Class)란?

클래스는 **데이터(변수)와 동작(메서드)**를 묶어놓은 구조입니다.
C#은 객체지향 언어이므로, 모든 프로그램은 클래스를 중심으로 구성됩니다.

 클래스 예제

class Person
{
    // 필드 (속성)
    public string Name;
    public int Age;

    // 메서드
    public void Introduce()
    {
        Console.WriteLine($"저는 {Name}, {Age}살입니다.");
    }
}

 객체 생성 및 사용

Person p = new Person();
p.Name = "홍길동";
p.Age = 25;
p.Introduce();

3.  접근 제한자 (Access Modifier)

  • public: 어디서나 접근 가능
  • private: 클래스 내부에서만 접근 가능
  • protected: 상속받은 클래스에서 접근 가능
  • internal: 같은 프로젝트 내에서만 접근 가능

대부분 기본적으로 private이고, 외부에 노출할 필드나 메서드에만 public을 사용합니다.


4. 생성자 (Constructor)

클래스가 생성될 때 자동으로 호출되는 특수한 메서드입니다.

class Dog
{
    public string Name;

    // 생성자
    public Dog(string name)
    {
        Name = name;
    }

    public void Bark()
    {
        Console.WriteLine($"{Name}가 멍멍 짖습니다!");
    }
}

// 사용
Dog d = new Dog("초코");
d.Bark();

 예제 정리

class Calculator
{
    public int Add(int x, int y) => x + y;
    public int Sub(int x, int y) => x - y;
}

// 사용
Calculator calc = new Calculator();
int sum = calc.Add(10, 5);
int diff = calc.Sub(10, 5);
Console.WriteLine($"합: {sum}, 차: {diff}");

 

이번 글에서는 C#의 핵심 개념 중 하나인 메서드와 클래스에 대해 정리해보았습니다.
이 두 가지를 이해하면 객체지향 구조로 코드를 더 체계적으로 짤 수 있게 됩니다.

 

728x90
반응형

+ Recent posts