본문 바로가기
오픈소스를 위한 기초 상식

실습: 객체지향 프로그래밍을 활용한 다양한 프로그램 구현

by 지나가는 프로도 2025. 2. 16.

주소록 관리 프로그램

주소록 관리 프로그램은 객체지향 프로그래밍(OOP)의 개념을 활용하여 연락처를 효율적으로 저장하고 관리할 수 있도록 설계되었습니다. 연락처 클래스와 주소록 관리 클래스를 통해 사용자들은 연락처를 추가, 검색 및 저장할 수 있습니다.

1.1 프로그램 코드

class 연락처:
    def __init__(self, 이름, 전화번호, 이메일=""):
        self.이름 = 이름
        self.전화번호 = 전화번호
        self.이메일 = 이메일

class 주소록관리:
    def __init__(self):
        self.연락처목록 = []
    
    def 연락처추가(self, 연락처):
        self.연락처목록.append(연락처)
    
    def 연락처검색(self, 이름):
        for 연락처 in self.연락처목록:
            if 연락처.이름 == 이름:
                return 연락처
        return None
    
    def 연락처저장(self, 파일명="주소록.txt"):
        with open(파일명, "w", encoding="utf-8") as f:
            for 연락처 in self.연락처목록:
                f.write(f"{연락처.이름},{연락처.전화번호},{연락처.이메일}\n")

1.2 추가 기능 및 확장 가능성

  • 연락처 수정 및 삭제 기능 추가
  • 연락처 그룹화 및 정렬 기능 추가
  • GUI(그래픽 사용자 인터페이스) 지원
  • 데이터베이스 연동을 통한 영구 저장

 

파일 자동분류기

 

파일 자동분류기는 사용자의 특정 폴더 내 파일을 미리 정의된 규칙에 따라 자동으로 정리하는 프로그램입니다. 파일의 확장자별로 폴더를 생성하고 이동하는 방식으로 동작합니다.

2.1 프로그램 코드

import os
import shutil
from pathlib import Path

class 파일분류기:
    def __init__(self, 경로):
        self.경로 = Path(경로)
        self.분류규칙 = {
            "이미지": [".jpg", ".png", ".gif"],
            "문서": [".pdf", ".doc", ".txt"],
            "음악": [".mp3", ".wav"]
        }
    
    def 폴더생성(self):
        for 폴더 in self.분류규칙.keys():
            새폴더 = self.경로 / 폴더
            if not 새폴더.exists():
                새폴더.mkdir()
    
    def 파일분류(self):
        for 파일 in self.경로.glob("*.*"):
            확장자 = 파일.suffix.lower()
            for 종류, 확장자목록 in self.분류규칙.items():
                if 확장자 in 확장자목록:
                    대상폴더 = self.경로 / 종류
                    shutil.move(str(파일), str(대상폴더 / 파일.name))

2.2 추가 기능 및 확장 가능성

  • 사용자 정의 규칙 추가 (예: 특정 파일 이름 패턴)
  • 파일 크기별 정리
  • 날짜별 정리
  • 중복 파일 탐지 및 처리

 

데이터 포맷 변환기

 

데이터 포맷 변환기는 CSV, JSON 및 XML 형식의 데이터를 상호 변환하는 기능을 제공합니다. 다양한 데이터 형식 간의 변환을 통해 데이터 활용도를 높일 수 있습니다.

3.1 프로그램 코드

import json
import csv
import xml.etree.ElementTree as ET

class 데이터변환기:
    def __init__(self, 입력파일):
        self.입력파일 = 입력파일
        self.데이터 = None
    
    def CSV읽기(self):
        with open(self.입력파일, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f)
            self.데이터 = list(reader)
    
    def JSON변환(self, 출력파일):
        if self.데이터:
            with open(출력파일, 'w', encoding='utf-8') as f:
                json.dump(self.데이터, f, ensure_ascii=False, indent=2)
    
    def XML변환(self, 출력파일):
        if self.데이터:
            root = ET.Element("데이터")
            for 항목 in self.데이터:
                child = ET.SubElement(root, "항목")
                for key, value in 항목.items():
                    ET.SubElement(child, key).text = value
            
            tree = ET.ElementTree(root)
            tree.write(출력파일, encoding='utf-8', xml_declaration=True)

3.2 추가 기능 및 확장 가능성

  • Excel 및 SQL 데이터 지원
  • 데이터 검증 및 필터링 기능 추가
  • 대용량 데이터 처리 성능 최적화

프로그램 사용 예시

# 주소록 사용
주소록 = 주소록관리()
주소록.연락처추가(연락처("홍길동", "010-1234-5678", "hong@email.com"))
주소록.연락처저장()

# 파일 분류기 사용
분류기 = 파일분류기("C:/Downloads")
분류기.폴더생성()
분류기.파일분류()

# 데이터 변환기 사용
변환기 = 데이터변환기("데이터.csv")
변환기.CSV읽기()
변환기.JSON변환("결과.json")
변환기.XML변환("결과.xml")

결론

위에서 소개한 세 가지 프로그램은 객체지향 프로그래밍을 활용하여 실생활에서 유용하게 사용할 수 있도록 구현되었습니다. 주소록 관리 프로그램은 효율적인 연락처 관리를, 파일 자동분류기는 컴퓨터의 파일 정리를, 데이터 포맷 변환기는 다양한 데이터 형식 간 변환을 지원합니다. 이러한 프로그램들은 객체지향 설계 원칙을 활용하여 유지보수성과 확장성을 고려한 구조로 개발될 수 있으며, 필요에 따라 다양한 기능을 추가하여 더욱 발전시킬 수 있습니다.