[Python MySQL] MySQL을 활용한 단어장 프로그램 만들기
[Python MySQL] Python에서 MySQL 연결하고 데이터 조회하기Python 설치부터 VSCode, Jupyter, venv설정까지파이썬을 시작하기 앞서가장 중요한 것은 개발환경 설정이다. Python 설치, VSCode 확장 프로그램, venv 가
sdesign416.tistory.com
단어장 프로그램을 수업시간에 만들고 복습을 하다보니
데이터 저장 클래스가 왜 필요한지에 대해 의문점이 들었다.
# 단어장 프로그램에서 사용된 클래스명
class Word:
def __init__(self, eng, kor, lev=1):
self.eng = eng
self.kor = kor
self.lev = lev
DAO에서 아래처럼 딕셔너리나 튜플로 바로 받고
따로 클래스를 생성 안하면 되지 않나? 라는 생각이 들었다.
그래서 찾아보니 클래스를 생성해야하는 명확한 이유가 있었다.
# 딕셔너리로 저장
word = {
'eng': 'apple',
'kor': '사과',
'lev': 1
}
# 튜플로 저장
word = ('apple', '사과', 1)
1. 데이터 구조 통일을 위해
딕셔너리로 바로 사용을 할 경우 키 이름을 잘못 입력할수도 있다.
키 이름을 잘못 입력하면 프로그램에서 데이터를 가져올 때 에러가 발생하게된다.
# 딕셔너리 key 잘못 입력했을 때
word1 = {
'eng': 'apple',
'kor': '사과'
}
word2 = {
'english': 'banana',
'kor': '바나나'
}
# 에러 발생
print(word2['eng'])
KeyError 발생
그렇기 때문에 클래스를 따로 만들어 모든 객체가 같은 구조를 가질 수 있도록 통일시켜주는것이다.
# 클래스 사용하여 데이터 구조 통일
word1 = Word('apple', '사과', 1)
word2 = Word('banana', '바나나', 1)
2. 데이터의 의미를 쉽게 파악하기 위해
튜플을 사용하여 값을 표현하면 다른 사람들은 각 값이 무엇을 의미하는지 파악하기 어렵다.
# 튜플로 생성
word = ('apple', '사과', 1)
# 튜플로 값 찾기
word[0]
word[1]
word[2]
하지만 클래스를 사용하면
값을 찾을 때 클래스의 속성 이름만 봐도 어떤 데이터를 의미하는지 유추하기가 쉽다.
즉, 코드의 가독성이 좋아지고 유지보수측에서도 훨씬 쉬워지기 때문에 클래스를 사용한다.
# 클래스로 객체 생성
word = Word('apple', '사과', 1)
# 값 찾기
print(word.eng)
print(word.kor)
print(word.lev)
3. 클래스 간 데이터를 쉽게 전달하기 위해
단어장 프로그램에선 4개의 클래스로 구성하였다.
- Word : 단어 데이터 저장
- WordsDAO : 데이터베이스 처리
- WordService : 프로그램 기능 처리
- Menu : 사용자 입출력
근데 데이터 저장 클래스가 없을경우엔
DAO에서 조회한 데이터를 튜플이나 딕셔너리 형태로 계속해서 전달해줘야한다.
그렇게 되면 Service 클래스에서는 데이터의 구조를 직접 기억해야 한다.
예를 들어 튜플을 사용한다면 word[0], word[1], word[2] 와 같이 접근해야 하고,
딕셔너리를 사용한다면 키 이름을 정확히 알고 있어야 한다.
이 과정에서 인덱스를 잘못 사용하거나 키 이름을 잘못 입력하여 오류가 발생할 가능성이 높고
데이터의 의미를 파악하기 어려워 코드의 가독성과 유지보수성이 떨어질 수 있다.
그렇기 때문에 데이터 저장 클래스를 별도로 생성하여
데이터 관리를 훨씬 편리하게 해준다
정리
word클래스 없이
DAO 클래스에서 조회한 데이터를 딕셔너리나 튜플형태로 반환을 하고
Service와 Menu클래스에서 해당 데이터를 그대로 사용하면 되지만
이렇게 사용하면 위에서 말했던 좋지 않은 상황들이 발생하기 때문에
데이터 저장 클래스를 별도로 생성하여 프로그램을 만드는것을 권장한다.
'Python > Database' 카테고리의 다른 글
| [Python MySQL] MySQL을 활용한 단어장 프로그램 만들기 (0) | 2026.06.09 |
|---|---|
| [Python MySQL] 회원가입, 로그인, 회원정보 수정, 회원 탈퇴 프로그램 만들기 (0) | 2026.06.09 |
| [Python MySQL] Python에서 MySQL 연결하고 데이터 조회, 추가하기 (0) | 2026.06.09 |