Python 기초 - 10.지금까지의 공부내용 복습

2 분 소요

함수 & 패키지

함수: 기능을 구현

→ 함수를 묶으면 패키지


예) 리스트에 숫자를 저장하고 탐색하고 삭제하는 기능을 구현하려 할 때 (DAO의 역할과 비슷)

필요한 함수:

  • 저장기능()

    1. 파라미터로 숫자를 받아서 저장하거나

      파라미터 : 함수 이름 옆 괄호에 작성한 일종의 지역변수.

      → 함수를 실행하기 위해 반드시 필요한 값을 호출할 때 받아오고 싶을 경우 사용

    2. 함수 안에서 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() : 콘솔에 에러 출력

파일 입출력

  1. 파일 오픈

    f = open(‘파일경로’, ‘오픈모드’)

    • 오픈모드 (r: 읽기, w: 쓰기, a: 이어쓰기)
    • 반환값 = 오픈된 파일을 제어할 수 있는 file 객체
  2. 읽고쓰기

    f.read() - 파일 읽기

    f.write() - 파일 쓰기

  3. 파일 닫기

    f.close()

클래스

int, float, str 등 기본 타입만 가지고 객체를 표현이 어려움

⇒ 객체를 표현하기 위한 데이터 타입을 정의해 놓은 것 = 클래스


예) 학생의 이름, 번호, 학과 등 여러개의 데이터를 담는 방법

  1. 1차원 리스트 = [이름1, 번호1, 학과1, 이름2, 번호2, 학과2, … ]

  2. 2차원 리스트 = [[이름1, 번호1, 학과1], [이름2, 번호2, 학과2], … ]

    → 리스트는 차수가 올라갈수록 복잡도가 올라가는 문제 발생

    → 학생의 문제점: 한 객체가 갖는 데이터 값이 여러개이고, 타입도 다양하다 (하나의 기본 타입 변수에 담지 못함)

    ⇒ 위 문제를 해결하기 위해 여러가지 데이터, 타입을 묶을 수 있는 새로운 타입을 만들자!

    ⇒ “클래스”

  3. 클래스


클래스 사용법:

  1. 타입을 만든다 = 클래스 정의
  2. 타입으로 변수를 만든다 = 객체 생성, 메모리 할당받음
  3. 만든 변수에 값을 할당한다 = 객체 멤버 변수에 값 할당, 값을 읽을 수 있음
  4. 메서드 호출 가능
  • 멤버변수는 다른 메서드에서도 만들 수 있지만 호출 순서에 따라 에러가 발생할 수 있기 때문에 생성자(init)에서 정의한다

클래스의 구성요소: 멤버변수(객체의 데이터를 담기위한 속성), 메서드(기능)


예) 우리 회사가 모니터를 생산한다. 이 때, 모니터 재고 관리 프로그램이 필요하다면?

1. 모니터 클래스 (VO) 생성

프로그래밍을 위해 실체(모니터)를 프로그래밍 객체로 구성하는 과정 = 모델링

모니터가 가질 수 있는 속성모음 (VO):

  • 모델명
  • 가격
  • 재고수량
  • 크기

모니터를 코드로 변환

= 하나의 모니터를 표현할 수 있는 타입 정의

= 모니터 클래스를 정의

모니터 클래스(VO)의 역할 = 객체의 값 저장

2. DAO + Service 클래스 구성

모니터 재고 관리를 하기 위해 정보를 기록/수정하고 필요한 기능을 제공해야 한다.

필요한 기능:

  • 등록 : 모니터 정보를 입력받는다 → Monitor 객체 생성 → 리스트에 추가
  • 검색 : 검색할 제품의 모델명을 입력받는다 → 리스트의 객체들을 하나씩 꺼내서 비교 → 찾은 결과 반환
  • 전체출력 : 리스트의 모든 객체 출력

기타사항

  • 클래스 변수명 앞에 __를 붙이면 프라이빗 변수가 되어서 클래스 밖에서는 변수가 확인되지 않는다.

    → 보안상의 문제를 막기 위해 사용하는 경우가 많다

  • 클래스 정의: 파이썬의 모든 클래스는 자동으로 object 클래스를 상속받는다. 그래서 object가 가지고 있는 모든 멤버변수와 메서드를 자동으로 상속받음.

    • __str__() : 자동으로 상속받는 object 클래스의 멤버변수와 메서드 중 하나. 객체를 설명하는 문자열을 반환, 클래스명 and 할당받은 메모리의 참조값을 문자열로 반환 (참조값은 16진수로 표기)
      • id() 함수를 사용하면 해당 값의 메모리 참조값을 10진수로 변환하여 표기

댓글남기기