Python 기초 - 10.지금까지의 공부내용 복습
함수 & 패키지
함수: 기능을 구현
→ 함수를 묶으면 패키지
예) 리스트에 숫자를 저장하고 탐색하고 삭제하는 기능을 구현하려 할 때 (DAO의 역할과 비슷)
필요한 함수:
-
저장기능()
-
파라미터로 숫자를 받아서 저장하거나
파라미터 : 함수 이름 옆 괄호에 작성한 일종의 지역변수.
→ 함수를 실행하기 위해 반드시 필요한 값을 호출할 때 받아오고 싶을 경우 사용
-
함수 안에서 input() 으로 숫자를 받아서 저장하거나
-
-
탐색기능()
-
삭제기능()
-
탐색, 삭제 기능 구현 시 입력받은 숫자가 리스트에 없을 경우 발생하는 문제는 try-except로 예외처리 가능
⇒ 만든 함수들을 모아서 패키지화 가능
전역변수 & 지역변수
- 함수 안에서만 사용할 경우에는 지역변수 활용
- 여러 함수들이 공통적으로 사용해야 한다면 전역변수 활용
VO/DTO, DAO, Service
VO (Value Object): 데이터를 묶어주는 역할 (또는 DTO, Data Transfer Object)
- 서비스와 DAO 사이에서 데이터를 전송할 때 VO에 묶어서 전송시킨다
Service: 사용자가 외부에서 사용할 기능들의 묶음
DAO: 저장소 작업, 데이터 핸들링.
(*참고: MVC(Model-View-Controller) 디자인 패턴)
입출력
입력: 밖에서 프로그램으로 데이터가 들어오는 것
( input() - 키보드로 입력받은 값이 프로그램으로 들어옴 )
출력: 프로그램에서 외부로 데이터가 나가는 것
( print() - 프로그램 데이터가 콘솔로 나감 )
표준입출력(stdio)
클래스를 설정하지 않아도 특별한 작업 없이 기본적으로 입력, 출력을 할 수 있도록 기본적으로 제공되는 입출력 객체
- 표준입력: sys.stdin → 표준입력장치(키보드)에서 읽음 담당
- 표준출력: sys.stdout → 표준출력장치(콘솔)에서 출력 담당
- 표준에러: sys.stderr → 표준출력장치(콘솔)에서 에러 출력 담당
- sys.stdin.read() : 키보드 입력
- sys.stdout.write() : 콘솔 출력
- sys.stderr.write() : 콘솔에 에러 출력
파일 입출력
-
파일 오픈
f = open(‘파일경로’, ‘오픈모드’)
- 오픈모드 (r: 읽기, w: 쓰기, a: 이어쓰기)
- 반환값 = 오픈된 파일을 제어할 수 있는 file 객체
-
읽고쓰기
f.read() - 파일 읽기
f.write() - 파일 쓰기
-
파일 닫기
f.close()
클래스
int, float, str 등 기본 타입만 가지고 객체를 표현이 어려움
⇒ 객체를 표현하기 위한 데이터 타입을 정의해 놓은 것 = 클래스
예) 학생의 이름, 번호, 학과 등 여러개의 데이터를 담는 방법
-
1차원 리스트 = [이름1, 번호1, 학과1, 이름2, 번호2, 학과2, … ]
-
2차원 리스트 = [[이름1, 번호1, 학과1], [이름2, 번호2, 학과2], … ]
→ 리스트는 차수가 올라갈수록 복잡도가 올라가는 문제 발생
→ 학생의 문제점: 한 객체가 갖는 데이터 값이 여러개이고, 타입도 다양하다 (하나의 기본 타입 변수에 담지 못함)
⇒ 위 문제를 해결하기 위해 여러가지 데이터, 타입을 묶을 수 있는 새로운 타입을 만들자!
⇒ “클래스”
-
클래스
클래스 사용법:
- 타입을 만든다 = 클래스 정의
- 타입으로 변수를 만든다 = 객체 생성, 메모리 할당받음
- 만든 변수에 값을 할당한다 = 객체 멤버 변수에 값 할당, 값을 읽을 수 있음
- 메서드 호출 가능
- 멤버변수는 다른 메서드에서도 만들 수 있지만 호출 순서에 따라 에러가 발생할 수 있기 때문에 생성자(init)에서 정의한다
클래스의 구성요소: 멤버변수(객체의 데이터를 담기위한 속성), 메서드(기능)
예) 우리 회사가 모니터를 생산한다. 이 때, 모니터 재고 관리 프로그램이 필요하다면?
1. 모니터 클래스 (VO) 생성
프로그래밍을 위해 실체(모니터)를 프로그래밍 객체로 구성하는 과정 = 모델링
모니터가 가질 수 있는 속성모음 (VO):
- 모델명
- 가격
- 재고수량
- 크기
모니터를 코드로 변환
= 하나의 모니터를 표현할 수 있는 타입 정의
= 모니터 클래스를 정의
모니터 클래스(VO)의 역할 = 객체의 값 저장
2. DAO + Service 클래스 구성
모니터 재고 관리를 하기 위해 정보를 기록/수정하고 필요한 기능을 제공해야 한다.
필요한 기능:
- 등록 : 모니터 정보를 입력받는다 → Monitor 객체 생성 → 리스트에 추가
- 검색 : 검색할 제품의 모델명을 입력받는다 → 리스트의 객체들을 하나씩 꺼내서 비교 → 찾은 결과 반환
- 전체출력 : 리스트의 모든 객체 출력
기타사항
-
클래스 변수명 앞에 __를 붙이면 프라이빗 변수가 되어서 클래스 밖에서는 변수가 확인되지 않는다.
→ 보안상의 문제를 막기 위해 사용하는 경우가 많다
-
클래스 정의: 파이썬의 모든 클래스는 자동으로 object 클래스를 상속받는다. 그래서 object가 가지고 있는 모든 멤버변수와 메서드를 자동으로 상속받음.
- __str__() : 자동으로 상속받는 object 클래스의 멤버변수와 메서드 중 하나. 객체를 설명하는 문자열을 반환, 클래스명 and 할당받은 메모리의 참조값을 문자열로 반환 (참조값은 16진수로 표기)
- id() 함수를 사용하면 해당 값의 메모리 참조값을 10진수로 변환하여 표기
- __str__() : 자동으로 상속받는 object 클래스의 멤버변수와 메서드 중 하나. 객체를 설명하는 문자열을 반환, 클래스명 and 할당받은 메모리의 참조값을 문자열로 반환 (참조값은 16진수로 표기)
댓글남기기