학습 로그/Python3

D+18 [Team Project] "Class" 핵심개념 정리

goodjop79 님의 블로그 2026. 4. 28. 18:16

ㅇ 일 자 :  2026년 4월 28일
ㅇ 목 표 : 팀 프로젝트 개발과정에서 팀프로젝트를 이해하고, 오류코드를 수정할 수 있다.
ㅇ 내 용

1. 개발자 학습 가이드 (핵심개념 정리)

1.1. 개발자의 마인드셋 및 필수 역량

  • 지속적 학습: 개발은 지식 습득이 멈추지 않는 직종입니다. 독서를 취미로 삼아 기본 개념을 꾸준히 쌓는다
  • 효율성 추구 (알고리즘): 불필요한 연산과 전기 소모를 줄이는 최적화된 로직을 구현하는 것이 개발자의 역할
  • 도구 활용: 단순 반복 작업은 '바이브코딩' 같은 도구를 활용할수도 있고, 타인의 프로그램을 분석하며 학습할 수도 있다.
  • 그러나 결국 개발자 자기것으로 만드는 것과 검증능력을 기르는 것은 개발자의 몫이다.

 

2. 객체지향 프로그래밍(OOP)과 클래스(Class)

2.1. 클래스의 핵심 구성  

  • 속성(Attribute): 변수
  • 메서드(Method): 함수
  • 클래스를 사용하는 이유 : 구조화와 가독성: 데이터와 기능을 하나로 묶어(캡슐화) 복잡성을 낮추고 현실 세계의 개념을 직관적으로 설계
  • 재사용성: 하나의 설계도(클래스)로 여러 객체를 생성하여 코드 중복을 방지
  • 유지보수: 데이터 구조나 기능 변경 시 관련 클래스만 수정하면 되어 관리가 용이
  • 객체지향 기술: * 상속: 부모 클래스의 기능을 이어받아 확장하거나 교체
  • 다형성: 같은 명령이라도 객체에 따라 다르게 동작
  • 캡슐화: 내부 데이터를 보호하고 필요한 기능만 외부로 노출

 

3. 데이터 및 변수 관리 규칙

  • 이터 타입: 파이썬은 리스트 등을 통해 유연한 데이터 관리를 지원
  • 변수 사용: * i, j, k: 반복문에서 통용되는 표준 변수명
  • 전역/지역 변수: 프로그램이 복잡해질수록 변수 관리가 중요하며, 전역변수는 주로 DB를 통해 관리. 클래스 내에서는 고유한 변수 명명 규칙을 준수
  • 예외 처리: 정해진 절차를 벗어난 상황을 제어하는 다양한 기법을 익혀야 한다

※ 참고할 사항

  • 개발자라면?
    - 현장은 개발실력은 없는데 개발지식은 많이 쌓여 있다. 개발자는 기본개념을 갖고 있어야 한다. 
    - 개발자는 공부를 지속할수 밖에 없는 직종이다. 취미는 독서가 되야 한다. 
       예) AI그래픽카드 : 1장 몇천만원  / 서버 1개 구축시 최소 약 ?억 소요
            1) 왜 변수를 사용해야 하는가? 
            2) 3중 for문 활용하라 : 경우의 수를 찾아 준다
            >> for a 
                      for a - 
                           for a -
  • 표준라이브러리 : 타인이 만들어 놓은것, 가져다 기능들을 사용하되 클래스 개념을 알아야 한다. 라이브러리는 클래스 기반으로 만들어져 있다.
  • 알고리즘 : 전기, 연산이 많이 들어가는데 이것을 줄여주는 효과가 있는 것을 만드는 개발자
  • 단순반복 작업은 바이브코딩이 다 해 준다. 타인이 만든 프로그램을 분석해 보는 것도 추천
  • 클래스를 왜 배워야 하는가?  개발자가 클래스(Class)를 배워야 하는 이유는 현대적인 소프트웨어 개발에서 코드의 조직화, 재사용성, 유지보수성을 극대화하여 효율적이고 안정적인 애플리케이션을 만들기 위해서 배운다
  • 클래스는 객체지향 :  프로그래밍(OOP)의 핵심으로, 관련된 데이터와 기능(메서드)을 하나의 단위로 묶어 관리하는 "설계도" 역할을 한다.
  •  "예외처리"는 정식절차를 벗어난 것을 반복하는 것이다. 예외처리 기법은 많다. 
     input 를 인트로로 묶어서 사용, 재귀함수는 사용하지 않고 반복문을 사용한다. 단, 파일검색 할때는 재귀함수는 사용
  •  클래스 : 객체지향을 잘 설명하는 것이 개발, 객체는 "속성"(=변수), "매소드"(=함수)를 갖음
  • list : 하나의 변수에는 한가지 항목만 넣는 것이 원칙이지만, 파이썬은 쓸수 있다. 
          예) ["가", 1,2,["1"]]
  • 파이썬은 데이터 분석이나 ai 등은 ""절차 지향""이다.
  • 함수의 최소 가능단위
       >> 함수---> 클래스(함수의 단위가 모인것) ---> 프로그램(클래스단위가 모인것)  
       >> def 함수명( ):
               변수 : for i, j, k, : 세계적으로 반복문 사용할때 사용하는 변수이다           
               문장           
       >> class 선언하기  
  • 전역변수를 사용하고, 지역변수를 사용하지 않는다. 프로그램이 복잡해 질수록 스크립스 내에서 코드를 생성하는데 개발자들은 DB에 접근해서 필요한 전역변수들은 DB에서 뿌려준다. 클래스 내에서 동일한 변수를 사용할 수 없다. 변수 name 규칙을 정한다.
  • 예제문제는 실습을 해보고 클래스 개념을 이해하기 (교재 488~490p 프라이빗 변수와 게터/세터)
     - 상속 : 클래스 기반의 객체지향 언어들은 ""상속"" 기능 지원한다. 다른 누군가가 만들어 놓은 기본 형태에 내가 원하는 것만 추가하거나 교체하는 것이 바로 "상속"이다.
    - 프로그래밍 언어는 기반이 되는 것을 "부모", 이를 기반으로 생성한 것을 "자식"이라고 함
    (예시) 마트 pos기계가 동시에 2명것을 계산 할수 있다. 상품을 추가할 때 먼저의 계산을 중단하고 다른계산을 먼저 할수 있다.

※ 코드 참고할 사항

1. 코드의 구조화와 가독성 향상 (모듈화)
  • 복잡성 감소: 관련 데이터(속성)와 동작(메서드)을 하나로 묶어(캡슐화) 코드를 체계적으로 관리할 수 있습니다.
  • 직관적인 설계: "학생", "자동차", "게임 캐릭터" 등 현실 세계 개념을 코드로 표현할 때 클래스 사용하면 코드의 의미가 명확해진다
2. 코드 재사용성과 유지보수성 (생산성)
  • 효율적인 객체 생성: 클래스라는 설계도를 바탕으로 동일한 구조의 객체를 여러 개 생성할 수 있어 반복 코드를 줄인다
  • 간편한 유지보수: 데이터 구조가 변경되거나 기능이 추가될 때, 관련 클래스만 수정하면 되어 유지보수가 매우 용이하다
3. 객체지향 프로그래밍의 핵심 기술 구현
  • 상속(Inheritance): 기존 클래스의 특징을 이어받아 새로운 클래스를 생성하여 코드의 확장성을 높인다.
  • 다형성(Polymorphism): 같은 명령(메서드)을 내리더라도 객체의 종류에 따라 다르게 동작하게 하여 유연성을 제공한다.
  • 캡슐화(Encapsulation): 내부 데이터를 숨기고 필요한 기능만 외부에 노출하여 보안성을 높인다.

 

4. 함수와 재귀(Recursion)

  • 구조: 함수 → 클래스(함수의 집합) → 프로그램(클래스의 집합)으로 구성
  • 재귀 함수: 문제 내부에서 자기 자신을 다시 호출하여 작은 단위로 문제를 해결하는 방식
  • 핵심 요소: 종료 조건(Base Case)과 재귀 호출(Recursive Step).
  • 주의사항: 파일 검색 등 특수한 경우 외에는 메모리 오버플로우와 성능 문제로 인해 일반적인 반복문(for, while) 사용이 권장

4.1. 재귀 함수란?   

4.1.1. 재귀 함수(Recursive Function) 

    함수 내부에서 자기 자신을 다시 호출하여 문제를 더 작은 단위로 분할하여 해결하는 방식,  수학의 귀납적 정의와 유사하며, 복잡한 문제를 단순하게 정의할 수 있어 팩토리얼( ), 피보나치 수열, 하노이의 탑 등 알고리즘 구현핵심

** 재귀함수의 핵심요소 **
   - 종료 조건(Base Case) : 무한 호출에 빠지지 않도록 재귀를 멈추는 가장 작은 문제 단위.
   - 재귀 단계(Recursive Step) : 
자기 자신을 호출하여 문제를 더 작은 문제로 축소시키는 과정.Factorial) ** 정의 : n! = n × (n-1) × ... ×1               재귀적 정의 : f(n) = n × f(n-1), 단, f(1) = 1.
# 팩토리얼 계산 재귀함수 예제 
 include <stdio.h>  # 표준 입출력 함수 사용을 위한 헤더

# 팩토리얼을 계산하는 재귀 함수
int factorial(int n) {
    # 1.예외 처리: 음수는 팩토리얼 정의되지 않음
    if (n < 0) {
        return -1;            # 오류를 의미하는 값 반환
    }

    # 2.종료 조건 (Base Case)
    # n이 0 또는 1이면 결과는 1
    if (n == 0 || n == 1) {
        return 1;
    }

    # 3.재귀 호출 (Recursive Call)
    // n! = n * (n-1)!
    return n * factorial(n - 1);
}

int main() {
    int num;    # 사용자로부터 입력받을 정수 변수

    # 사용자 입력 받기
    printf("정수를 입력하세요: ");
    scanf("%d", &num);

    # 팩토리얼 함수 호출 및 결과 출력
    int result = factorial(num);

    # 결과가 -1이면 오류 메시지 출력
    if (result == -1) {
        printf("음수에 대한 팩토리얼은 정의되지 않습니다.\n");
    } else {
        printf("%d! = %d\n", num, result);  # 결과 출력
    }

    return 0;  # 프로그램 정상 종료
}

>> 코드 설명
종료 조건 (if (n <= 1)): n이 1 이하가 되면 1을 반환하며 재귀 호출을 멈춘다
재귀 호출 (n * factorial(n - 1)): factorial(5)는 factorial(4)를 호출하고, 최종적으로 factorial(1)까지 내려가 계산한다
스택 메모리: 재귀 함수는 호출될 때마다 스택(Stack) 메모리에 인자 값이 저장되어 역순으로 처리된다

※ 재귀 함수 구조 
종료 조건: n == 0 || n == 1
재귀식:     n * factorial(n - 1)

 
 

4.1.2. 재귀함수 장·단점

  • 장점: 코드가 간결해지고 귀납적 사고방식을 코드로 직접 구현하기 쉬움.
  • 단점: 함수 호출이 스택 메모리에 계속 쌓여 메모리 제한이 있는 경우 '스택 오버플로우' 발생 가능성 있고,
    반복문(for, While) 에 비해 메모리를 많이 사용하고 성능이 느릴 수 있다.
    재귀 함수는 문제를 거꾸로 생각하여 가장 기초적인 상태(Base Case)에서 출발해 문제를 해결하는 방식이다

 <<개발자>>
- Python, C+,C# : 개발언어 
- 응용s/w : PM (Project Manager), ASP(Active Server Pages 웹개발 기술), NET(네트워크), Windows
- Web : FE(화면), BE(서버로직, back end) 
- APP(Application) : 고수준, 각종 웹앱, 데스크탑 프로그램 등
- DB(Data Base)  : 고수준, 데이터를 저장 관리하는 시스템, 정보창고, 정리시스템  (회원가입, 로그인, 게시글 등)

- SERVER : 고수준, 데이터 처리, 인증/보안처리, api 제공 등
- AI 개발    : 전공자, TensorFlow, Pytorch
- Big Data : 전공자, Python, SQL, 고객취향분석, 이상징후 탐지, 수요예측 등

🔹 DB (Database)
     데이터를 저장하고 관리하는 시스템,  사용자 정보, 게시글, 주문 내역 같은 데이터를 체계적으로 저장하고 필요할 때 꺼내 쓰는 곳
🔸 쉽게 말하면 “정보를 쌓아두는 창고 + 정리 시스템”

예시 : 
회원가입 → DB에 저장,   로그인 → DB에서 확인,    게시글 → DB에 기록
🔹 웹 구조에서 역할 :
FE: 화면에서 데이터 보여줌
BE: DB에 데이터 저장/조회 요청
DB: 실제 데이터 보관

👉 흐름:
사용자 → FE(화면입력) → BE(저장/조회) → DB(보관) → BE(조회) → FE(화면출력) → 사용자

🔹 대표적인 DB 종류
1) 관계형 DB (표 형태) : 엑셀처럼 테이블 구조, 가장 많이 사용됨

예:
MySQL,  PostgreSQL, Oracle Database,
NoSQL DB (유연한 구조) -JSON 같은 형태, 구조가 자유로움

예:
MongoDB
Redis
🔹 DB를 다루는 언어 : SQL → 데이터 조회, 저장, 수정, 삭제
🔸  DB = 데이터를 저장하고 필요할 때 꺼내 쓰는 핵심 저장소