ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 10일차 수업 정리_모듈, 지역/전역변수, 클래스, 생성자(Constructor)
    Python 2024. 2. 6. 15:04

    - 09일차 복습

    - 모듈이란

    - 변수의 종류

    - 클래스

    - 생성자(Constructor)

     

     


    - 09일차 복습

     

    사용자 정의 함수란 사용자가 직접 만든 함수이며 반복되는 코드를 보다 쉽게 관리하기 위해 선언하여 사용한다.

     

    함수 : 주어진 값에 정해진 처리를 하여 그 결과를 반환하는 기능 / 특정 기능을 실행하는 코드

     

    def 함수명(매개변수,...) :
    실행할 기능
    return 반환값


    - 모듈이란

    모듈 : 파이썬 파일(.py) / 파이썬 파일 자체가 모듈이 될 수 있다.

    언제든지 사용할 수 있는 변수나 함수 클래스를 모아놓은 파일을 의미한다.

     

    import : 다른 모듈/파일을 지정해서 읽어들이는/가져오는 처리를 하는 구문

     

    1) 모듈의 사용

    import 파일명 ==> 파일 안에 있는 모든 것을 사용하겠다!

     

    from 파일명 import * ==> from 뒤에 있는 파일에서 모든것( * ) 을 사용하겠다!

     

    from 파일명 import 함수명1, 함수명2,.. ==> 특정 함수만 골라서 가져오겠다!

     

    2) 별칭(별명) 사용하기

    모듈 혹은 함수를 import한 경우, 긴 이름을 대신하여 별명(alias)을 지정해 사용이 가능하다.

    모듈 혹은 함수의 이름이 긴 경우 주로 짧은 별명을 지정해 긴 본래 이름 대신 사용한다. 

     

    별명 지정 키워드 ==> as

    import 모듈명 as 별칭

     

    random / randint / randrange / choice / sample

    import random
    # 랜덤(난수)과 관련된 여러 함수를 모아 놓은 파일
    
    # randint(a, b) : a이상, b이하의 숫자 중에서 랜덤한 숫자를 return
    print(random.randint(1, 10)) # 1 ~ 10
    
    # randrange()
    # randrange(a) : 0 ~ a-1 사이의 숫자 중 랜덤한 값을 return
    # randrange(a, b) : a ~ b-1 사이의 숫자 중 랜덤한 값을 return
    # randrange(a, b, c) : a, a+c,,,, b-1 사이의 숫자 중 랜덤한 값을 return
    
    print(random.randrange(10)) # 0~9
    print(random.randrange(2, 10)) # 2~9
    print(random.randrange(2, 10, 3)) # 2, 5, 8
    
    # choice(시퀀스 자료형)
    print(random.choice(['python', 'java', 'c']))
    
    # sample(시퀀스 자료형. 개수)
    li = ['봄', '여름', '가을', '겨울']
    print(random.sample(li,2))

     

    # 모듈에서 특정 함수만 import 하기

    # 모듈에서 특정 함수만 import 하기
    from random import randint, randrange
    print(randint(1, 5))
    print(randrange(10))
    # 위에는 random다 써야하는데 이렇게 쓰면 random 안써도됨

     

    time / sleep(초) / time()

    import time
    # time : 시간과 관련된 함수와 기능을 모아놓은 모듈
    
    # sleep(초) : 해당 초만큼 실행을 멈춰주는 함수
    print("안녕하세요")
    time.sleep(3) # 3초만큼 딜레이
    print("안녕히계세요")
    
    # time() : 1970년 1월 1일 0시 0분 0초부터 현재까지 흐른 초를 나타낸 값
    print(time.time())

     


    - 변수의 종류

    지역변수 함수 내부에서 선언한 변수
    함수 안에서만 사용가능
    전역변수 함수 밖에서 선언한 변수
    전체에서 사용가능
    value = 100 # 전역변수
    
    def change_value() :
        # 함수 안에서 value 값을 200으로 변경
        value = 200 # 지역변수
        print(f"value = {value}")
    
    change_value()
    print(f"value = {value}") # 전역 변수의 값은 변경되지 않음

     

    # 전역변수
    value1 = 100
    
    def change_value() :
        global value1  # 전역 변수 그대로 가져옴. 추천하는 방법은 아님
        value1 = 200
        print(f"value1 = {value1}")
    
    change_value()
    print(f"value1 = {value1}")

    global


    - 클래스 너무 중요 별표 짱 많이

     

    변수 = 값

     

    여러값을 저장하고 싶을 때는? 새로운 저장공간이 필요

    => 컬렉션 이용

     

    기능을 저장하고 싶을 때는?

    => 사용자 정의 함수

     

    여러 값(변수), 사용자 정의 함수를 여러개 저장하고 싶을 때는?

    => 클래스 

     

    1) 클래스의 기본 개념 정리

    함수(fuction) 특정 기능을 수행하는 코드의 모음
    클래스 안에서는 메소드(method)라고 한다
    클래스(class) 여러 변수와 함수(메소드)를 묶어 한번에 처리할 수 있는 것
    공통된 요소들이 모여 하나의 틀이 된다
    데이터 속성(data attribute) 데이터 속성으로서 데이터를 정의하는 것
    (self.변수에 데이터가 될 값을 대입해서 이용 가능)
    메소드(method) 메소드로서 기능 처리를 정의하는 것
    (첫번째 매개변수를 self로 한 함수를 정의)
    속성(attribute) 데이터 속성과 메소드를 합쳐서 부르는 말
    객체(object)/인스턴스(instance) 정의한 클래스를 실제로 이용하기 위해 사용
    클래스로부터 생성되는 각각의 존재가 인스턴스 (표현법의 창)

     

    2) 클래스와 객체

    class : 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면 (붕어빵틀, 호두과자 기계)

    object : class에 의해 만들어진 결과물(팥붕, 슈붕, 피붕, 팥없는 호두, 다른 소스가 들어간 호두)

     

    붕어빵 틀과 붕어빵의 관계 == 클래스와 객체의 관계

     

    하나의 붕어빵 틀에서 태어났지만 붕어빵 하나하나는 별도의 객체이다.

     

    붕어빵을 만드는 재료가 특징을 결정하듯 객체는 지정한 속성값에 따라 고유한 특징을 가진다.

    객체는 속성(상태, 특징)을 가지고 있으며 행위(행동, 동작, 기능)을 할 수 있는 대상
    객체의 속성은 변수로 구현, 행위(기능) 함수(메소드)로 구현
    객체를 만들기 위해서 클래스가 반드시 선언되어야함
    클래스를 통해서 객체를 만들고 활용할 수 있는 프로그래밍언어를 객체 지향 프로그래밍 언어라고 한다
    규모가 큰 프로그램을 작성하거나 유사한 객체가 많은 프로그램을 만들 때 객체 지향 프로그래밍 기법으로 
    코드를 더 편리하고 효율적으로 작성 가능

     

     

    3) 클래스 선언class 클래스명 : (주의사항 : 앞글자는 무조건 대문자)
            # 데이터 속성, 메소드
             def 메소드(self, 매개변수,...) : # 처리를 나타내는 함수(메소드)
                      self.변수 = ... # 데이터를 나타내는 변수(데이터 속성)
                      ...
                      return # 반환값 (선택)

    self 객체 구별용 매개변수(인스턴스 자기 자신을 나타냄)
    self.필드명으로 접근하면 여러 객체도 한번의 선언으로 구별해 다룰 수 있게됨
    클래스명 첫글자 대문자
    클래스 선언 콜론으로 행을 마침, 그 뒤부터는 클래스의 멤버와 메소드들은 들여쓰기 작성
    # class 클래스명 : 
    class Person :
        # 이름을 정의하는 메소드
        def get_name(self, name) :
          self.name = name
    
        # 나이를 정의하는 메소드
        def get_age(self, age) :
            self.age  = age # self.데이터 속성 = 매개변수
    
        def introduce(self) :
            print(f"안녕하세요 저는 {self.name}입니다")
            print(f"제 나이는 {self.age}입니다")

     

     

    4) 클래스 사용이란 추상적인 개념의 클래스로 객체를 만드는 작업을 객체화 작업이라고 한다.

     

    [객체화]
    객체명 = 클래스명()

    [각 속성에 접근]
    객체명.변수명
    객체명.메소드명()

    # 클래스를 사용하기 위해서는 객체를 만들어야함
    # => 객체화 작업
    pr1 = Person()
    print(pr1), type(pr1) # 객체의 참조값(주소값)
    
    # 데이터 속성에 값 대입
    pr1.name = '짱구'
    print(pr1.name)
    
    # 메소드 호출
    pr1.get_name("유리")
    print(pr1.name)
    # 객체 4개 만들기 p1, p2, p3, p4
    p1 = Person()
    p2 = Person()
    p3 = Person()
    p4 = Person()
    
    p1.name = "짱구"
    p1.age = 5
    p2.name = "철수"
    p2.age = 6
    p3.name = "짱아"
    p3.age = 3
    
    p4.get_name("유리")
    p4.get_age(7)
    
    p1.introduce()
    p2.introduce()
    p3.introduce()
    p4.introduce()

     

     

    클래스를 사용하는 정확한 이유

    - 하나의 클래스를 통해 여러개의 객체를 생성하므로 코드의 반복을 줄일 수 있다. 

    - 메소드를 하나만 변경하더라도 객체 하나하나의 메소드를 일일이 바꿔줄 필요없이 

      클래스 하나만 변경함으로써 모든 객체에 영향을 줄 수 있다.

     


    - 생성자(Constructor)

    객체(인스턴스)가 작성될때 처음에 반드시 처리되는 메소드

     

    __init__(initalize) 처음에 초기화를 시켜준다는 의미
    클래스를 통해서 객체를 생성하는 순간에 호출되는 특별한 메소드

    def __init__(self, 매개변수1,..) :
            self.데이터 속성1 = 매개변수1
            ...

    # 생성자가 추가된 Person 클래스 정의
    class Person : 
        # 생성자
        # __init__ 생성자 메소드명
        # 객체화 작업을 할때(생성자를 호출할 때) 데이터 속성 name, age를 초기화
        def __init__(self, name, age) :
            self.name = name
            self.age = age
    
        def introduce(self) : 
            print(f"안녕하세요 저는 {self.name}입니다 ")
            print(f"제 나이는 {self.age}입니다")
    
    # 객체화 작업 (이름, 나이를 초기화)
    # p1 = Person() 위 코드와 다르게 생성자가 생겨서 오류뜸
    p1 = Person("둘리", 10)
    p2 = Person("도우너", 11)
    
    # 데이터 속성에 접근해 초기화 확인
    print(p1.name)
    print(p1.age)
    print(p2.name)
    print(p2.age)
    
    p1. introduce()
    p2. introduce()

     

    2024.02.06

연의 취업 도전기.