MySQL 07. MySQL - 사용자 관리, 권한

|

생활코딩 - MySQL 강의를 듣고 중요한 내용을 정리하였습니다.

사용자 권한이란?

  • 사용자에 따라서 접근할 수 있는 DB 데이터와 사용할 수 있는 기능을 제한

GRANT

  • 사용자를 생성하고, 권한을 부여 (grant : 승인하다)
# 문법
GRANT 권한 ON 데이터베이스.테이블 TO '아이디'@'호스트' IDENTIFIED BY '비밀번호'

사용자의 제한

  • DB 서버에 접속하는 사용자를 제한한다.
  • 아이디@호스트 중에서 호스트는 접속자가 사용하는 머신의 IP를 의미한다. IP를 특정하지 않으려면 ‘%’를 사용
    • dev@123.100.100.100 : IP 123.100.100.100인 머신에서 접속한 ID dev
    • dev@% : IP 관계없이 ID가 dev인 사용자

대상의 제한

  • 사용자가 제어할 대상이 되는 데이터베이스, 테이블을 지정
  • *를 사용하면 모든 데이터베이스, 테이블을 제어 대상으로 함 (*.*,class.*)

권한(기능)의 제한

  • 사용할 수 있는 권한을 제한 (권한은 아래 표 참조 - 상황에 따라 달라진다)
개발자 DELETE, INSERT, SELECT, UPDATE
설계자 ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE, DELETE, INSERT, SELECT, UPDATE
DBA ALL

예제 - GRANT

  • ID가 dev, 비밀번호가 1111인 사용자가 class 데이터베이스만 접근하게 하려면 아래와 같이 한다.
mysql> GRANT DELETE, INSERT, SELECT, UPDATE ON class.* TO `dev`@`%` IDENTIFIED BY '1111';

  • ID가 archi, 비밀번호가 1111이고 클라이언트의 IP가 100.100.100.100인 사용자가 모든 데이터베이스에 접근하면서 설계자의 권한 템플릿을 이용하게 한다.
mysql> GRANT ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT,UPDATE ON *.* TO `archi`@`100.100.100.100` IDENTIFIED BY '1111';

SHOW GRANTS

  • 자신 의 권한이나, 특정 사용자의 권한을 열람한다.
# 문법
mysql> SHOW GRANTS [FOR 사용자]

#예제
mysql> SHOW GRANTS FOR dev;
+----------------------------------------------------------------+
| Grants for dev@%                                               |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dev'@'%'                                |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `class`.* TO 'dev'@'%' |
+----------------------------------------------------------------+

mysql> SHOW GRANTS FOR `archi`@`100.100.100.100`;
+------------------------------------------------------------------------------------------------------+
| Grants for archi@100.100.100.100                                                                     |
+------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON *.* TO 'archi'@'100.100.100.100' |
+------------------------------------------------------------------------------------------------------+

REVOKE

  • 사용자의 권한을 제거
# 문법
REVOKE 권한 ON 데이터베이스.테이블 FROM 사용자

# 예제 : 사용자 dev의 데이터베이스 class의 DELETE 권한을 제거
revoke DELETE on class.* from dev;

DROP USER

  • 사용자를 삭제
# 문법
DROP USER user [, user] ...

# 예제
DROP USER `dev`@`%`;

권한 테이블

views
DB 권한종류

phpMyAdmin

  • mysql 클라이언트 phpMyAdmin을 통하여 위와 동일한 사용자 권한 관리가 가능하다.
  • 클라이언트를 사용하면 사용자 관리를 편리하고, 정확하게 진행할 수 있기 때문에 가급적이면 phpMyAdmin과 같은 클라이언트를 사용하는 것을 권장한다.

컴퓨터공학 입문수업 3주차 강의노트

|

강의 중에 자유롭게 메모한 정리되지 않은 내용입니다. 강의 내용은 다른 포스팅에 따로 정리하였습니다.

4/21(금) DAY 18

숙제

  • python socket 활용하여 채팅 클라이언트 서버 만들기
  • 파이썬이면 60줄로 서버 클라이언트 소켓을 만들 수 있다 (다이어그램 참고 )

개발 사이트 정보

  • 구글 디벨롭퍼 그룹 : 구글 플러스 커뮤니티 GDG Korea
  • Django
  • GDG SEOUL
  • women techmakers
  • 파이썬은 챗봇 만들기 좋음

    네트워크

  • 수업자료
  • 용어를 익힌다는 관점에서 수업 듣기
  • 초기의 네트워크 통신(모뎀)은 1:1 만 가능하고 전화비가 많이 나왔다.
  • 다대다 통신의 시작
    • 버스구조 : 각각의 컴퓨터가 메인라인에 각각 연결되어 있는 구조가 버스구조
    • 링형 : 버스를 구부려서 끝과 끝을 연결
    • 스타형 : 가운데 관리하는 컴퓨터(메인서버)를 두고 연결되어 있는 상태
  • USB는 네트워크, 저장장치 둘다 수행이 가능하다.
  • 맥북에는 랜포트가 없다.
  • 에플에서는 USB로 RJ45 포트와 통신이 가능하다
  • LAN(근거리 통신망) < MAN(도시권 통신망) < WAN (광역 통신망)
  • AP : Access point
  • 공유기는 Asus 제품이 좋다. WiFi ac라고 붙은게 최신
  • 테더링 : 1:1 통신을 한다. (USB, 블루투스)
  • 핫스팟 : LTE를 Wifi로 바꿔서 다른 기기가 통신할 수 있도록 한다.
  • 임베디드, IOT 계역

OSI 7 layer (아주중요)

  • Open Systems Interconnection Reference Model
  • 국제 표준화기구에서 개발한 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것
  • packet : 과거 피쳐폰에서는 packet 단위로 요금이 부과
  • 일반적으로 1kbyte
  • 패킷이
  • 헤더 7개를 붙어셔 통과 시키면 ISP(Internet Service Provider)
  • 네트워크 카드에서 발생 (Application layer, presentation layer, session layer)
  • let’s encrypt - 개인홈페이지 암호화 가능 (사용법 참고)
  • ~ Network layer 는 컴퓨터 공학 영역 data link layer ~ 전자공학 영역
  • TCP/IP 프로토콜에서는 4단계를 가진다 (OSI 7 Layer Model 기반)

TCP/IP 프로토콜

  • 프로토콜 : 약속


  • 신입 면접 단골질문
    • lineked list
    • big O (버블소트 O(N^2), 퀵소트, 머지소트 O(N log N), 바이너리서치 O(log N))
    • stack, queue (쉬워서 잘 안나옴), 재귀함수 (피보나치, 하노이의 탑) 퀵소트, 등차수열 활용한 (1~1억 까지 더하기)

4/20(목) DAY 17

앞으로 공부해야 할 내용

  • liked list
    • double lineked list (dummy lineked list오 함께 반드시 공부)
    • deque (알아두기)
  • queue
    • circular queue (배열을 이용한 구현)
  • sorting (선생님 깃헙에 다 올라와 있음)
    • insertion sort (훑어보기)
    • selection sort (훑어보기)
    • heap sort (꼭!)
    • merge sort (꼭!)
  • tree
    • BST (Binary Search Tree) (아주중요)
    • AVL - 균형 맞추는 알고리즘 (BST 와 함께 공부)
  • table, map, (dictinary) - 파이썬에서 3개는 같다(?)
    • open addressing 기법
    • closed addressing 기법
  • graph (반드시 숙지)
    • BFS (broadness first search) 너비우선탐색
    • DFS (depth first search) 깊이우선탐색
    • kruskal algorithm (네비게이션에서 활용 가능)
    • 다이작스트라 (네비게이션에서 활용 가능, BFS기반 구현)
    • 프림
  • 그리디 알고리즘
  • 파이썬 데코레이터 찾아서 공부하기

수업내용

  • stack을 활용한 계산기 elif로 다시 짜기
  • 왜 else, if 깊게 짰는지?
    • 우선순위 (fizzbuzz)
    • if, elif, elif, elif : if 문이 False인 경우 elif로 이동, 첫번째 if 문은 배제
    • if, if, if, if : 첫번째 if False인 경우
  • ADT 는 유저 프로그래머가 사용하는 메소드

heap

  • heap 소트, priority queue 에 사용

퀵소트

  • 수업자료
  • 현업에서 많이 쓰인다.
  • 머지소트 꼭 공부하기
  • soritng, 성능평가
  • 빅오를 구할 때 유일하게 퀵소트만 worst case 가 아닌 평균 값으로 구한다. (다른건 최악의 케이스)
  • 버블소트의 빅오는 O(N**2), 퀵소트의 빅오는 O(N log N) 엔로그엔!! 머지소트도 엔로그엔 하지만 퀵소트가 가장 빠르다
  • 각 알고리즘의 빅오 외우기

퀵소트 bigO 구하기 (수업영상 다시 보기)


4/18(화) DAY15

  • 바이너리 서치 재귀적 구현 다시한번 연습하기

수식의 표기법

  • 수업자료
  • 중위 표기법 : 우리가 아는 수식
  • 후위 표기법 :

후기 표기법 만드는 법

  • 수업자료 참고

stack, 후위표기법을 활용한 계산기 만들기

Tree

  • tree, graph 는 이산수학에 들어가는 범주
  • 2개 뿐만이 아니라 3개 4개로 뻗어나갈 수 있다.
  • 일반적으로 말하는 tree 는 binary tree(이진트리)를 말한다.
class tree_node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
  • full binary tree 포화이진트리 : 많이 보이지는 않는다.
  • complete binary tree 완전이진트리 (힙 구현시 중요)

BST(Binary Search Tree) : 이진탐색트리

  • 아주중요함(구글링), 어려움, 2진 완전트리가 아니다.
  • AVL 알고리즘 공부할 것 - 이진탐색트리의 균형을 맞춰준다. (중요)

heap (숙제)

  • 수업자료
  • stack, queue 처럼 search가 필요 없다.
  • 전통적으로 heap의 이진트리를 만들어야 할때 배열로 만든다 (노드로 구현하는 것도 가능)
  • 1 based index
  • 완전이진트리 사용
  • heap 소트 : heap을 이용한 소트

heap 구현 힌트

  • num_of_data 의 data 는 완전 이진트리의 마지막 index를 의미한다.
  • left_child = parent * 2 > num_of_data 라면 해당 노드는 단말노드
  • left == num_of_data 라면 자식노드가 1개
  • left < num_of_data 자식노드가 둘 다 있다.

heap 구현 인터페이스 ADT

class Heap:
  def get_parent_idx(self, idx):
    return idx // 2

  def get_left_child_idx(self, idx):
    pass

  def get_right_child_idx(self, idx):
    pass

  def __init__(self, s_min_max = 'min'):
    self.dynamic_arr = [None, ]
    self.num_of_data = 0

  def is_empty(self):
    pass # boolean

  def size(self):
    pass

  def insert(self, data):
    pass

  # 단말노드면  None, 우선순위가 높은 자식노드의 인덱스
  def which_is_prior_child(self):
    pass

  def delete(self):
    pass

# 테스트코드
# list 아이템 출력
# delete 시 정렬이 되는지 확인     

4/17(월) DAY14

  • binary search recursive 복습
  • Bubble sort
  • Insertion sort 구글링 해보기
  • Quick sort (목요일에 배울 예정)
  • 참고영상

이번주 수업 내용 (개요)

  • data structure
    • 자료구조와 알고리즘이 뭔지?
  • linked list : node를 이용하여 구현
  • stack, queue : stack으로 계산기 만들어보기
  • heap만 유일하게 배열을 기반으로 구현한다.
  • 자료구조를 만들어봤다 하면 자주 받는 질문
    • 후위표기법 계산기 만들어봤니?
    • linked list 만들어봤니?
    • heap 뭘로 구현해봤니? (one based, zero based )

유용한 정보

  • 자료구조, 알고리즘 : 코더와 엔지니어의 차이, 진입장벽
  • 백지에 linked list 구현
  • 최단경로 graph로 구현
  • 이벤트 드리븐 구글링 해보기
  • 자료구조를 배우면 라이브러리를 보는 시야가 넓어진다.

노드

linked list

  • 자료구조에서 가장 중요한 개념 중 하나

ADT(abstract data type) 추상 자료형

  • 새로 정의한 자료형
  • 메소드의 목록 (인터페이스)

stack

  • stack 과 queue는 search가 없다.
  • Node 기반으로 stack 구현해보기 (숙제) head만 있어도 구현이 된다
  • LIFO (Last Input First Out, 선입후출, 라이포)
  • 접시

stack ADT (인터페이스)

  • is_empty() -> boolean
  • push -> insert : push(data)
  • pop -> delete : pop return 맨위 값을 리턴하고 동시에 삭제
  • peek -> 엿보기 : 맨 위 값 반환만 하고 삭제는 안함

queue

  • Node 기반으로 queue 구현해보기 (숙제) head,tail 만 있어도 구현이 된다
  • FIFO (First Input First Out, 선입선출, 파이포)
  • 화장실 줄서기

queue ADT (인터페이스)

  • enqueue == > insert …

4/14 (금) DAY13

수업내용 (개요)

  • data structure & algorithm
    • binary search
    • big O of binary search
  • recursion
    • fibonacci
    • hanoi tower
  • sorting
    • bubble sort
    • quick sort (하루종일 할겁니다. 피벗 적용으로 성능개선까지, 현업에서 가장 많이 사용)
  • data structure
    • linked list (이것만 잘 넘어오면 다른 자료구조 괜찮을거에요)
    • stack, queue (계산기 만들어 봅니다)
    • heap & priority queue
  • 수업자료 있음
  • linear search (순차검색) : 순서대로 찾는다. 성능평가시 비교대상으로 사용
  • linear search는 정렬 방식이 상관 없다.
  • binary search (이진탐색) :
  • binary search는 반드시 정렬된 상태에서 시작해야한다.
  • 로그실행시간을 보장한다.

성능측정

  • 수업자료 있음

BigO의 대표적인 사례

재귀함수

  • 함수 정의 내에 같은 이름의 함수가 올 때 이를 재귀함수라 부른다.
  • 반드시 탈출조건이 있어야 stack 터지는걸 방지할 수 있다.
  • 같은 행위가 반복될 때 재귀함수를 사용한다.

피보나치 수열

하노이의 탑

버블정렬

파이썬의 제너레이터와 코루틴


4/13 (목) DAY12

질문

  • 컴파일 언어는 변수나 함수 선언 순서가 중요? (자바스크립트, CSS 처럼)

수업내용 (개요)

  • compiler vs interpreter 차이
  • instructions & register (핵심주제)
  • memory segments (아주중요)
  • virtual memory (중요)
  • operand stack –> virtual machine의 작동원리
  • process vs thread
  • mulithread 구현
  • race condition (못하면 검색)
  • mutual exclusion (못하면 검색)

메모

  • 파이썬은 연산된 데이터 저장할 때 stack을 사용한다.
  • 컴퓨터공학 5대 과목
    • 프로그래밍 언어
    • 자료구조 : 링크드리스트, 스택, 큐 (계산기)
    • 알고리즘 : 바이너리서치, 소팅
    • 컴퓨터 구조 : cpu, 레지스터
    • os : 메인메모리 (ram), 하드디스크, 4G씩 부여받아도 왜 여러게 프로그램이 실행 가능한가? vm

4/11 (화) DAY11

수업내용 (개요)

  • 함수의 호출 방법 (아주중요)
    • call by reference (참조에 의한 호출)
    • call by value (값에 의한 호출)
    • call by assignment
  • CPU & memory : segmentation(중요) > 찾아보기
    • register
    • cache
    • main memory (코드, 데이터, 스텍, 힙 segment)
  • paging 기법 (중요) > 찾아보기
  • compiler & interpreter

유용한 정보

  • 왜 메모리에 대해서 알아야 하나?
    • Facebook의 string 최적화 예시 [자료]https://www.youtube.com/watch?v=kPR8h4-qZdk&feature=youtu.be
    • 수업자료
  • 면접단골질문
  • call by reference, call by value 차이 설명
  • 링크드 리스트 만들어봐라

call by reference

  • 두 변수의 값을 바꾸는게 목적인 함수
  • C++ 을 사용한 예시

call by value

  • ‘하지만 메인 함수의 변수 n과 func 함수의 변수 n은 메모리상 다른 위치에 상주해 있으므로 직접적인 연관이 없다.’
  • C++을 사용한 예시

출처: http://luckyyowu.tistory.com/9 [요우의 내맘대로 블로그]

  • call by reference
    • 함수 간에 같은 변수를 사용하는 방법
    • 참조자 & : 포인터

  • 참고글

call by assgignment

  • 파이썬은 call-by-reference도 아니고, call-by-value도 아니다.
  • 파이썬은 모든 요소가 객체이기 때문에 메모리 효율상 call by assgignment 방식을 사용한다.
  • mutable, immutable

  • 파이썬에서 class 는 독자적인 메모리공간인 심볼테이블을 갖고있다.
  • 따라서 메소드 안에서 call by reference와 같이 동작한다.
  • 함수선언시 def (definition) 임시 메모리공간을 정의한다.

  • 파이썬에서 call by assgignment 개념을 모르면 나중에 어려움을 겪게된다.

  • 파이썬의 함수 호출방식 call by assgignment

    • 처음은 call by reference 처럼 동작한다 (매개변수 인자의 주소를 가르킨다)
    • 하지만, 함수 내에서 인자의 값이 재할당 되면 해당 매개변수의 자료형에 따라서 동작이 다르다.
      • 불변객체 (immutable) : 숫자, 스트링는 call by value 처럼 동작
      • 가변객체 (mutable) : dic, list는 call by reference 처럼 동작 (단, 매개변수 일부 내용을 업데이트 할때만)

숙제

  • 함수 호출방식 설명하기

메모리

  • ram은 1byte(8bit) 단위로 주소를 만든다. (우편번호 처럼)
  • 32bit 컴퓨터, 64bit 컴퓨터의 차이는?
    • 와이어의 갯수 (와이어의 전압에 따라 0,1 구분)
    • 한번에 보낼 수 있는 데이터의 양이 32개다, 64개다.
  • 32bit 시스템은 4G까지만 메모리를 표현할 수 있다. (2 ** 32 = 약 4기가) (용산의 사기수법 32bit 컴퓨터에 8기가 메모리를 사용하는건 의미가 없다.)
hex(id(a)) # 메모리 address를 의미한다.
# '0x1012241d0'
  • 파이썬 인터프리터에 의존적
    • python 32bit : 32/4 = 8 , 메모리 주소 8자리
    • python 63bit : 64/4 = 16, 메모리 주소 16자리
  • 컴파일 언어는 모든 data segment(code, data, heap, stack)를 사용하지만, 파이썬은 heap 영역만 사용한다.
  • del을 잘 활용하면 메모리 관리를 더 잘 할 수 있다.

4/10 (월) DAY10

수업내용 (개요)

  • 연산자 오버로딩 (operator overloading)
  • 다형성, 추상클래스 (polymorphism, abstract class)
  • data analysis oop (cache개념 사용)

유용한 정보

  • 프로그램을 만들려면 클래스별로 따로 파일을 만들고 조합 할 때 main.py을 사용하는게 좋다.
  • 2의보수 : 나중에 웹개발 보안쪽 check sum을 할 때 2의 보수를 사용한다.
  • 다형성: 같은 코드 다른결과 (같은 코드인데 어떤 객체에 적용하냐에 따라서 결과가 달라진다)

cache

진수 (노트필기 참고)

10진수

  • 0~9 10개의 숫자

2진수

  • 0,1 2개의 숫자

16진수

  • 0~9, a,b,c,d,e,f

2의 보수

  • 컴퓨터가 음수를 저장하는 양식
  • 1byte
  • 부동소수점의 특징
    • 정확도를 포기한 대신에 표현 범위를 어마어마하게 늘렸다.
    • if a = 12.12132: 이런 식으로 사용하면 안된다.

컴퓨터공학 입문수업 2주차 강의노트

|

강의 중에 자유롭게 메모한 정리되지 않은 내용입니다. 강의 내용은 다른 포스팅에 따로 정리하였습니다.

4/7 (금) DAY9

유용한 정보

  • marp 마크다운으로 프리젠테이션 하는 툴

10진수 -> 2진수로 바꾸기

  • 10진수 38 = 32(2^5) + 4(2^2) + 2(2^1) => 2진수 100110
  • 10진수 7 = 4(2^2) + 2(2^1) + 1(2^0) => 2진수 111
  • 10진수 73 = 64(2^6) + 8(2^3) + 1(2^0) => 2진수 1001001

2진수 -> 10진수 바꾸기

  • 2진수 100110 = 2^5 + 2^2 + 2^1 => 10진수 38
  • 2진수 10101 = 2^4 + 2^2 + 2^0 => 10진수 21

2진수 <-> 16진수 바꾸기

  • 16진수 : 0~15 까지 16개의 숫자를 0~f 로 표현
  • 2진수 4개 = 16진수 1개
  • 16진법을 2진법으로 바로 변환하려면 각 자릿수를 2진법으로 변환하면 된다.
    • 예를 들면 25FB16를 0010(2) 0101(5) 1111(F) 1011(B)처럼 끊어서 변환한 다음 전부 붙여주고 앞의 00을 떼준 뒤 100101111110112로 적으면 된다.
  • 반대로 2진법을 16진법으로 바로 변환하려면 1의 자리에서부터 4개씩 끊어서 16진법으로 변환해주면 된다.
    • 101110101010101010111101000102를 (000)1 0111 0101 0101 0101 0111 1010 0010로 끊어주고 각각 변환하면 175557A216이 된다.
    • 100 0101 1000 = 4 A 8 => 0x4A8

16진법

  • 자리수 하나가 0-15까지 표현할 수 있다.
  • 16진수의 자리수 1개는 2^4을 표현할 수 있다.
  • 1바이트는 8비트이고 이를 통해서 표현할 수 있는 수는 2^8개이다.
  • 2진법이라면 8자리가 필요하지만, 16진법이라면 2자리만으로 가능하다.

2의 보수

  • 1의 보수 : 0은 1로, 1은 0으로 바꾸는 방식
  • 1의 보수의 문제 : 0이 2개 생긴다.
    • +0 : 0000 0000
    • -0 : 1111 1111
  • 2의 보수 : 1의 보수에 1을 더하는 것 (컴퓨터에서 음수를 표현하는 방식)
  • 맨 앞자리는 양수와 음수를 구분하기 위해서 사용(사인비트) 0: + 1: -
  • 컴퓨터에는 뺄셈 로직이 없기 때문에 보수를 사용한다.
  • 예: 2의 보수 11110011 => 1의 보수 1 1110010 => 부호화 절대값 1 0001101 => 10진수 -13

수업내용

목차

  • 상속
    • is-a (상속)
    • has-a (상속 X)
      • 지금은 안쓰지만 예전 코드를 이해하려면 알아야한다.
      • 객체합성으로 대체, 해결한다. (아주 과거에는 상속으로 해결했다)
  • 함수 오버로딩, 오버라이딩 (아주 중요)
  • class member의 쓰임
  • oop 실습 - 상속 실습
  • 추상 클래스의 목적과 쓰임 (생각보다 많이 쓰임)
  • 다형성 (polymorphism) - 파이썬만으로 다형성을 이해하면 오해의 여지가 큼 (C++ 예시로 학습)
  • 정보은닉 (information hiding)
  • 캡술화 (encapsulation)
  • 절차지향에서 객체지향으로 (oop porting 과제)

상속

  • 상속은 언제 쓸까?
  • OOP의 핵심 개념

is-a (아주 중요)

  • 가장 이상적이다. 자식이 부모로서 is-a 합당한가 ?
  • notebook is a computer (o)
  • laptop is a desktop (x)
  • computer 라는 공통 속성이 있고 (부모클래스) laptop, notebook 는 공통 속성을 각각 상속받는다.
  • 꼬이면 해결하기 어렵기 때문에 요즘에는 상속을 되도록 쓰지말라는 말이 나온다.
  • 클래스 만들 때 첫자는 대문자로 하는게 좋다.

오버라이딩

  • 상속에서 쓰이는 개념
  • 같은 이름의 함수가 있으면 자식의 함수가 우선
  • (참고) 오버로딩
    • 같은 공간 (네임스페이스)안에 같은 이름의 함수를 정의하는 것을 함수 오버로딩이라고 한다.
    • 하지만 파이썬에서는 오버로딩을 인정하지 않는다. (c++ 함수 오버로딩 가능)

has-a

  • 과거 레거시 문법 (현재는 아무도 안쓴다)
  • A policeman(자식) has a gun(부모)
  • 종류가 아닌 소유
  • class gun, class police(gun) 이런식으로 쓸 수있지 않을까?
  • 그럼 이런 개념을 has-a가 아니라 어떻게 표현할 수 있을까? 객체합성으로 하자!

객체합성

  • 고급기법
  • has-a 라는 현실 상황을 객체합성이라는 기법을 사용하여 해결한다.
class Gun:
    def __init__(self, kind):
        self.kind = kind

    def bang(self):
        print('빵야빵야')

# 객체합성

class Police():
    def __init__(self, gun_kind = ''):
        if gun_kind:
            self.gun = Gun(gun_kind) # 인스턴스 객체 생성 (Gun 인스턴스를 생성해서 인스턴스 멤버로 할당한다.)
        else:
            self.gun = None # 멤버는 있지만 값은 없다.

    def get_gun(self, gun_kind):
        self.gun = Gun(gun_kind)

    def shoot(self):
        if self.gun:
            self.gun.bang()
        else:
            print('당신은 총이 없습니다. 못 쏩니다.')

oop 실습

__name__ = '__main__' 의미

  • 테스트를 위해 넣은 코드가 모듈 import시에 실행되지 않도록 한다.
  • python test.py 처럼 직접 파일을 실행시키면 if 문이 참이되어 if 다음 문장들이 수행된다.
  • 참고
  • main file : 실행파일
  • 모듈을 개발할 때 하나 만들면 테스트를 다 돌려본다. 그때 활용하는 것
    if __name__ == "__main__"
    

UML

  • uml
  • sw architect가 설계 할 때 사용
  • 한눈에 클래스의 상속 관계를 알 수 있는 도안

캡슐화

  • 클래스의 존재 목적 : 연관성 있는 정보의 묶음
  • 그럼 연관성의 기준을 어디까지 잡을 건지? (사람마다 다를 수 있다. 정답은 없다.)
  • 어디까지 캡슐로 묶을 건가? 이걸 잘 짜는게 (UML) 아키덱트의 역할

4/5 (수) DAY8

궁금한점

  • 수업에서 배운 pickle 모듈을 통해서 파일 입출력을 복습하고 있습니다.
  • abc.txt 파일을 작성하고 해당 내용을 pickle.dump() 를 사용하여 abc2.txt 를 만들었습니다.
  • 만들어진 abc2.txt 파일에 원하지 않는 문자가 함께 들어가는 문제가 발생합니다.

질문은 아래와 같습니다.

  • 바이너리(wb) 형식으로 txt 파일에 데이터를 입력하면 문제가 생기나요?
    • 답변 : 그렇지는 않습니다. 하지만 dump로 txt 파일을 작성하지 않고 vim, 메모장 등에서 작성한 txt 파일에는 별도의 정보가 추가로 들어갈 수 있다. (따라서 pickle.load를 데이터를 읽어오면 원하지 않는 문자열이 들어감)
  • pickle.load()를 통해서 읽어올 수 있는 파일은 pickle.dump()를 통해서 바이너리(wb) 형식으로 입력된 데이터를 가진 파일만 가능하나요?
    • 답변 : 그렇습니다.

유용한 정보

  • 아스키와 유니코드, utf8 (아주 중요 - 동영상 강의 다시 보기)
  • reference counting (가비지 컬렉터)
    • c를 제외한 모든 언어는 가비지 컬렉터를 갖고 있다. (노트 내용 참고)
    • 이를 통해서 메모리 관리를 한다.
  • 심볼테이블 (변수를 저장해 놓는 공간)
    • .__dict__ 를 통해서 클래스가 가진 심볼테이블을 확인할 수 있다.
    • 모든 인스턴스는 자신의 심볼테이블에는 없지만 클래스의 변수에 접근할 수 있다.
    • 같은 변수가 존재 한다면 같은 공간 안에 있는 변수가 우선한다.
  • 인스턴스 멤버와 클래스 멤버의 차이 (중요)
  • 인스턴스 메소드와 클래스 메소드의 차이 (중요)

4/4 (화) DAY7

todo

유용한 정보

  • 영어 독해능력 (3-4년) 이후 네트워크

    정규분포식

  • pickle 사용법
  • pickle.dump? : 인터페이스를 보여준다. (주피터에서만 가능)

.items(), .keys(), .values()

  • 적차적프로그래밍 방식으로 데이터 분석 소스

oop

  • oop를 하는 가장 큰 이유는 modeling
  • 클래스변수와 인스턴스변수

  • 파이썬은 데이터를 저장할 때 ram의 private heap 부분에만 저장한다.
  • 파이썬은 연산한 정보를 저장할때 ram의 stack 부분에 저장 (c는 register에 저장 엄청빠름)

4/3 (월) DAY6

todo

수업 소개

  • 양태환 강사님
  • ythwork83@gmail.com
  • 2-3주차 내용은 어려울 예정
  • 자료구조는 전공을 포기하게 만드는 큰 원인 중 하나
  • call by reference, call by value는 C, C++ 로 설명할 예정 (파이썬 - call by assignment 사용)
  • sw 개발자가 되는 법 (넥슨 박종천 부본부장)
    • recursion, index, sort
    • stack / Heap
    • process / Thread
    • call by reference, call by value
    • native code
    • write simple text-based games
  • 레지스터를 모르면 인터프린터 언어와 컴파일 언어를 이해하기 어렵다.
  • 최적화를 했냐 안했냐가 개발자의 능력 : 메모리 / CPI(성능영향) - 메모리와 CPU
  • 하나의 언어만, 웹프로그래밍만 하는게 아니라 최적화를 위해서 메모리와 CPU를 알아야한다. (인터프린터언어 - 컴파일언어 하나 이상 배우는 것을 추천)
  • python은 메모리는 stack, heap(모든 오브젝트와 변수를 저장)만 사용한다.
  • framework의 단점은 쉽게 할 수 있도록 이미 틀이 존재한다는 것
  • 전통적인 sw 공학에서 dic은 자료형이 아니다. 정확하게 말하면 dic은 자료구조
  • 장고는 강력하지만 느리다 (렉서, 파서 최적화를 통해서 장고가 점점 빨라지고 있다. 개선의 여지가 있음)
  • 파이썬만 하지말고 컴파일러 언어 (자바)를 꼭 같이 배우는 것을 추천 (array의 개념 등이 다름)

컴퓨터공학 입문수업 1주차 강의노트

|

강의 중에 자유롭게 메모한 정리되지 않은 내용입니다. 강의 내용은 다른 포스팅에 따로 정리하였습니다.

3/31(금) DAY5

유용한 정보

  • 텐서플로우 : 머신러닝과 딥러닝을 위해 구글에서 만든 오픈소스 라이브러리
  • GO : C의 컴파일 속도와 메모리 관리의 단점을 보완한 언어 (추천)
  • NodeJS : 빠른 개발 속도, 동접자가 많아지면 불안정한 단점
  • Spring Django : 안정적인 서비스
  • 추천 책 : 장고 2스푼 (two scoops of django)
  • 파이썬은 다양
    • 파이썬 + (C-싸이썬, JAVA-자이썬 등등)
    • 유연하게 다른 언어와 결합이 가능하다. (본딩이 쉽다)

3/30(목) DAY4

유용한 정보


3/29(수) DAY3

유용한 정보

  • 구글 앱엔진, firebase 활용하면 앱개발시 백엔드 개발이 편하다.
  • 장고 기반으로 iOS 앱 개발도 가능하다.
  • 동작하는 단위대로 add, commit, push (번거롭지만 최소 단위로 하는게 좋다.)
  • add, commit .. add, commit 후에 한번에 push 해도 된다. (오프라인상 작업 가능)
  • https://www.hackerrank.com/ 추천

level 3. 야근 지수

|

출처

문제

야근 지수 회사원인 수민이는 많은 일이 쌓여 있습니다. 수민이는 야근을 최소화하기 위해 남은 일의 작업량을 숫자로 메기고, 일에 대한 야근 지수를 줄이기로 결정했습니다. 야근 지수는 남은 일의 작업량을 제곱하여 더한 값을 의미합니다. 수민이는 1시간 동안 남은 일 중 하나를 골라 작업량 1만큼 처리할 수 있습니다. 수민이의 퇴근까지 남은 N 시간과 각 일에 대한 작업량이 있을 때, noOvertime 함수를 제작하여 수민이의 야근 지수를 최소화 한 결과를 출력해 주세요. 예를 들어, N=4 일 때, 남은 일의 작업량이 [4, 3, 3] 이라면 야근 지수를 최소화하기 위해 일을 한 결과는 [2, 2, 2]가 되고 야근 지수는 22 + 22 + 22 = 12가 되어 12를 반환해 줍니다.

풀이

def noOvertime(n, works):
    if n >= sum(works):
        return 0
    while n > 0:
        works[works.index(max(works))] -= 1
        n -= 1
    result = sum([i*i for i in works])
    # 야근 지수를 최소화 하였을 때의 야근 지수는 몇일까요?
    return result

배운점

  • map 함수를 사용하지 않고도 리스트의 각 값에 연산을 수행할 수 있다.
  • index(x) 함수는 리스트에 x라는 값이 있으면 x의 위치값을 리턴한다. 값이 없으면 ValueError가 발생한다.