-
12주차 목 1109(프로젝트생각해보기, 정규식, 예외처리, 클래스)광주인력개발원 일일포스팅(메모장) 2023. 11. 9. 16:54728x90반응형
프로젝트 구성할 때 생각해보기..
프로젝트 배경..
개발자 입장에서 만들어보기
알고있는 기술은 기본이고.. 이런 '시스템'이 도움(통계를 바탕)이 될거같고 > '필요' 할 것이다..
(목적성, 타당성 있는 프로젝트)
모델 소개 / 기술 소개
형식이 있는 개발
현업 담당자 / 관련자 인터뷰
플로우 차트
기술 기준..
요구사항(이유) 명세서
주차별 일정(큰틀)
전체 프로젝트 세분화하여 업무 및 일정관리
(작업구분, 완료율, 내용, 시작날짜, 완료날짜, 담당자, 작업일 체크(시각화))
FIGMA 전체 프로그램 시각화
기능요약/ 자체 평가 의견(ex 개발 배경을 바탕으로 조사... 이러한 문제점을 개선,,,)
객관적 정리
-------------------------------------------------------------------------------------------------------------------------------------------------------
프로젝트 계획 방법
1. 프로젝트 구성
회의 하면서 나왔던 기능 , 키워드 등을 정리하여 데이터화
2. 정리된 데이터를 목록화(단계를 정하고 세분화)
일정을 정하기 : 공부5h > 프론트 5h > 백엔드 5h 기능수행기간 15h
위험관리 명세서
구분 / 위험및이슈내용 / 제기자 / 발생일자 / 중요도 / 긴급성 / 영향도 / 조치자 / 상태 / 실제종료일 / 해결 및 대응방안 등...
계획대비 실적/목표 명세서
계획대비 실적 80%
WBS를 만들어야 지키고 안 지키고 실적이 나왔는지 안나왔는지 알 수 있다.
(하루목표 주간목표)
-------------------------------------------------------------------------------------------------------------------------------------------------------
Scrum(스크림)
스프린트 단위로 일정을 관리
역할
프로덕트 오너 (제품 책임자, 관리 추가 / 제거 , WBS)
팀 ( 스프린트 플래닝) > 스프린트 백 로그
그 주에 만든것을 스프린트 리뷰(팀 리뷰)
스프린트 회고 ( 팀 피드백 (룰 추가 제거 등))
Scrum 주요 특징
솔루션에 포함할 기능/ 개선점에 대한 우선 순위를 부여
개발 주기 1~4주 정도로 하고 개발 주기마다 실제 동작할 수 있는 결과를 제공
(너무 짧으면 개발(분석/설계/개발/테스트) 할 수 있는 시간이 부족, 너무 길면 느슨해진다.)
개발 주기마다 적용할 기능이나 개선에 대한 목록을 제공
(해당 주기의 목표를 작성하지 않으면 목적을 잃을 가능성이 있음.)
매일 15분 정도의 scrum meeting 회의를 가진다.
(
항상 팀을 우선으로 생각
(자신의 task 보다 주변 issue가 더 급하면 도와준다.)
scrum 추구가치
팀안에서 이야기를 많이한다
(기능이 이해가 안되면 말하고 이해하기, 정당한 것을 요구할때는 타당한 것을 제시하고 설득하기)
할 일을 해야한다. 기술 성공에 집중하고 그 외의 걱정은 신경쓰지 않기.
(한번에 하나의 일부터 마무리하고, 불필요한 반복 작업은 제거하거나 자동화한다.).
팀의 묙포 달성을 위해 헌신하며 모든 권한을 부여한다.
(개인보다 팀 성과 달성이 우선)
경력과 경험이 사람을 만들고 팀을 존중
주요 역할자
프로덕트 오너
제품 백 로그 관리 : (요구사항) 관리 설명
제품 검토 :
스크럼 마스터(조장)
오너와 팀이 가치와 원칙으로조직변화를 촉진
개발 팀
백로그를 바탕으로 개발하여 고객을 만족
주요 용어
제품 백로그 : 개발할 제품의 요구사항인 사용자 스토리 집합이며, 우선 순위로 관리
이 기능이 뭔지 글로 설명(서술 x) (보고서식)
사용자 스토리 : 과거 요구사항 명세처럼 업무 범위를 구체화하기 위한 개발자 입장이 아닌 유저스토리는 사용자가 사용하는 관점에서 어떤 가치를 제공할 것인지를 설명
(po는 이 기능이 누구에게 무슨 벨류를 제공하는지 설명, 향후 개발자는 그기 능의 벨류를 제공하기 위한 기술적이 녕ㄱ할과 책임을 가짐)
given - when- then
스프린트 : 계획 개발, 리뷰 등 최소 단위의 사이클이다 보통 1~4주 단위에서 선택
잠재적 출시 가능 제품 또는 최소 실행 가능 제품 : 팀이 최소 노력으로 고객에게 검증 결과를 받을 수 있는 수준의 제품
스프린트 계획 회의 : 스프린트 목표와 스프린트 백로그를 계획한느 회의(4주 스프린트 기준 8시간 정도 수행)
스프린트 백로그: 각각의 스프린트 목표에 도달하기 위해 필요한 작업 목록
칸반 보드: 작업을 시각적으로 업무 상태, 흐름을 보여주는 게시판
일일 스크럼 회의 : 매일 어제 한일, 오늘할일, 해결해야 할 장애/문재 요소를 공유하는 회의
(매일 15분 정도 수행)
(보고가 아닌 수평적으로 공유> 팀원이 아니면 발언권은 없다. po, 관리자 등도 참여한다면 똑같이 해야한다. 그렇지 않으면 듣는자리, 보고받는 자리로 변질되고 개발자의 관점에서 관리자가 노는 사람처럼 보인다. )
스프린트 리뷰 : 스프린트 마지막 날 개발자가 개발한 내용을 stakeholder, 고객 , 제품 책임자에게 시연하고 검토
(4주 스프린트 기준 4시간 정도 수행)
스프린트 회고 : 스프린트 마지막 날 좋았던 점, 개선할 점을 도출하고 더 나은 방향으로 개선(4주 스프린트 기준 3시간 수행)
-------------------------------------------------------------------------------------------------------------------------------------------------------
★학습
원시 문자열
문자열의 시작 따옴표 앞에 r을 두면 원사 문자열(raw string)이 된다.
print(r'This is Kim\'s dog')
this is Kim\'s dog
앞에 r 이 붙어 있는 원시 문자열이기 때문에 파이썬은 백슬래시를 문자열의 일부로 간주한다. 즉 백슬래시를 이스케이프 문자로 취급하지 않는다.
원시 문자열은 r'C:\User\Kim\Document' 와 같은 윈도우 파일 경로르 ㄹ나타내는 문자열에 필요하다.
문자열도 크게 보면 시퀀스라는 자료 구조에 속한다.
시퀀스는 리스트와 같이 항목들이 순서를 가지고 모인 자료구조이다
.
0 1 2 3 4 5 6 7 8 9 10 11
m o n t y p y t h o n
-12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
'HELLO'.isupper() 대문자로만 구성되어 있는 경우 True
islower() 소문자로만 구성되어 있는 경우 True
isalpha() 영문으로만 구성되어 있는 경우 True
isalnum() 영문자와 숫자로 구성되어 있는 경우 True
isdecimal() 숫자로만 구성되어 있는 경우 True
isspace () 공백, 탭 및 줄바꿈 문자열로 구성되어 있는 경우 True
정규식
BOOK [ a - zA - Z\d] +
[ : 대괄호는 문자들의 집합을 나타낸다.
a - z : 소문자 a 부터 z 까지의 문자
A - Z : 대문자 A 부터 Z 까지의 문자
\d : 0- 9까지의 숫자
+ : 1번이상의 반복
정규식
- regular expression : 패턴을 이용해서 문자열을 찾거나 바꾸거나 하는 기능
# 전화번호 형식이 맞는지 체크하는 프로그램 def check_numbere(phone_number): if len(phone_number) != 13: return False if phone_number[0:3] != '010': return False if phone_number[3] != '-': return False for i in range(4,8): if not phone_number[i].isdecimal(): return False if phone_number[8] != '-': return False for i in range(9, 13): if not phone_number[i].isdecimal(): return False return True
print('010-3333-5555 :=>', check_numbere('010-3333-5555'))
010-3333-5555 :=> True
print('000-3333-5555 :=>', check_numbere('000-3333-5555'))
000-3333-5555 :=> False
# a-z, A-Z, \d # '010-\d\d\d\d-\d\d\d\d' import re
pattern = '010-\d\d\d\d-\d\d\d\d' str = '휴대폰 번호는 010-1234-4567입니다.' found = re.search(pattern, str) print('휴대폰 번호 형식은 : ',found.group())
휴대폰 번호 형식은 : 010-1234-4567
# 문자 표현식 # ^ : 시작의 의미 => ^\d (첫글자가 숫자로 시작) (반복 안에있으면 부정의 의미) # $ : 끝의 의미 => ^\d$ (숫자로 끝나야) # . : 문자 .(한글자) ..(두글자) ....(네글자) # \d : 숫자 \d(숫자하나) \d\d(숫자 두개) # \w : 한개의 문자, 한개의 숫자 # \s : 공백(탭, 스페이스, 줄바꿈(\n), 캐리지리턴(CR 2개의 이스케이프 문자를 줄바꿈으로 친다.)) # [] : 범위 => [abc] ( a 또는 b 또는 c ), [a-z], [1-9]
# 수량 한정자 # * : 0이상 (없어도 Ture) 반복 => ' ' , "aa", "aaaaaaa" \w*(문자가 여러개여도..) # + : 1회이상 반복 => '' (거짓), 'a'(참), 'aa'(참) # ? : 0또는 1회 반복 # {m} : m 만큼 반복 => {3} 3번 반복 # {n, m} : n회 이상, 3회 이하 #(ab) : 그룹화 => 'ab', 'abab', 'ababab'
# .+ => 문자가 1나 이상 있을 때 # ^[1-9][0-9]*$ => 0이 아닌 숫자로 시작(1~9사이로 시작), 0-9사이 숫자가 여러개 올 수 있고 숫자로 끝난다. # ^\d{6}-\d{7}$ => 주민번호 # (Good)?Bye
def check_email(email_addr): pattern = '^[\w]+@[\w]+\.[a-zA-Z]{2,5}$' if(re.fullmatch(pattern, email_addr)): print(f'{email_addr}는 유효한 주소 입니다.') else: print(f'{email_addr}는 잘못된 주소 입니다.')
check_email('abc123@naver.com')
abc123@naver.com는 유효한 주소 입니다.
파일 열고 닫기
파일을 사용하려면 open() 함수를 이용하여 파일을 연다.
open()은 파일 이름을 받아서 파일 객체를 생성한 후에 반환한다.
파일이 열리면 우리는 파일에서 데이터를 읽거나 쓸 수 있다.
파일과 관련된 작업이 모두 종료되면 close()를 호출하여 파일을 닫아야 한다.
# 경로 : 워킹디릭토리 ( 워킹폴더 ) import os
os.getcwd()
'C:\\Users\\user\\python_basic'
예외처리
오류가 발생햇을 때 오류를 사용자에게 알려주고 모든 데이터를 저장하게 한 후에 사용자가 우아하게(gracefully) 프로그램을 종료할 수 있도록 하는 것ㅇ ㅣ바람직하다.
프로그램 정상적 흐름 예외발생
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
↓ ↑
→ → → → → → →
IOError: 파일을 열 수 없으면 발생
improtError: 파이썬이 모듈을 찾을 수 없으면 발생
ValueError: 연산이나 내장 함수에서 인수가 적절치않은 값을 가지고 있으면 발생
try:
예외가 발생할 수 있는 문장
except(오류):
예외를 처리하는 문장
ex
try:
z - x/y << 예외가 발생할 수 있는 문장
except ZeroDivisionError: << 예외
print ( "0으로 나누는 예외" )
범위가 작은거 >> 큰걸로
예외처리
- 오류를 처리 할 수 있게끔 지원 한다.
- try: 실행문1, 실행문2…. except 발생오류 as 오류변수: 에러가 났을 때에 실행 할 실행문…
try: a = 10 / 0 except ZeroDivisionError as e: print(e)
division by zero
a = [1, 2, 3, 4, 5] b = 6 try: print(a.index(b)) except: print('인덱스 오류')
인덱스 오류
try: print(a.index(b)) except Exception as e: print('인덱스 오류') # 오류가 났을때 실행 else: print('오류가 없으면 실행') finally: # 최소한 이거는 실행하고 죽어라.. print('오류가 나더라도 꼭! 실행')
인덱스 오류
오류가 나더라도 꼭! 실행객체 지향 프로그래밍
객체 지향 프로그래밍(OOP: object-oriented programming)은 우리가 사는 실제 세계가 객체들로 구성된 것과 비슷하게, 소프트웨어도 객체로 구성하는 방법이다.
절차 지향과 객체 지향
절차 지향 프로그래밍(procedural programming)은 프로시저(procediure)를 기반으로 하는 프로그래밍 방법이다.
객체 지향 프로그래밍(object-oriented programming)은 데이터와 함수를 하나의 덩어리로 묶어서 생각하는 방법이다.
절차 지향 프로그래밍 객체 지향 프로그래밍
┌ 메인 프로그램 ┐ 객체 객체
│ │ │ 데이터 데이터
함수1 함수2 함수3 │ │ │ │
│ │ ┌─ ─ ┼ ─ 함수 ─ ─ ─ ─ ┼ ─ ─함수
함수4 함수5 메소드 │ │
└ ─ ─함수 ─ ─ ─ ─ ─ ─ 함수
절차 지향의 문제점
가장 중요한 단점은, 서로 관련된 데이터와 함수를 묶을 수가 없다는 점이다. 따라서 절차 지향 방법에서는 데이터가 프로그램의 중요한 부분임에도 불구하고 프로그래머들은 함수 작성에만 신경을 쓰게 된다.
객체란?
객체(object)는 속성과 동작을 가진다 (자동차).
속성: 대표할 수 있는 것들 (기어)
동작: 속성가지고 동작할 수 있는 것들 (움직이기)
클래스
객체에 대한 설계도를 클래스(class)라고 한다. 클래스란 특정한 종류의 객체들을 짂어내는 형틀(template) 또는 청사진(blueprint)이라고도 할 수 있다.
클래스로부터 만들어지는 객체를 그 클래스의 인스턴스(instance)라고 한다.
캡슐화
개발자로서 클래스의 객체를 가지고 작업할 때는 객체가 어떻게 내부적으로 속성을 저장하고 어떻게 메소드들이 구현되는지 알 필요가 없다.
콩용 인터페이스만 제공하고 구현 세부 사항을감춘느 것은 캡슐화(encapsulation)이라고 한다.
캡슐화
알고리즘 / 데이터
(캡슐화는 데이터와 알고리즘을 하나로 묶는 것)
728x90반응형'광주인력개발원 일일포스팅(메모장)' 카테고리의 다른 글
13주차 월 1113 (가상환경 설정, 쥬피터, (도서관리프로그램) (2) 2023.11.13 12주차 금 1110 (MVC) (2) 2023.11.10 12주차 수 1108 (라이브러리) (4) 2023.11.08 12주차 화 1107 (lambda, 함수, 변수) (3) 2023.11.07 12주차 월 1106 (제어문 for...) (2) 2023.11.06