로보테크AI

융합_로보테크 AI 자율주행 로봇 개발자 과정-26/01/06

steezer 2026. 1. 6. 18:30

모듈: 독립적인 기능을 수행하는 구성 단위 의미

코드 재사용성

 

엔트리포인트 : 프로그램의 진입점(시작점, 시작 트리거)

__name__=="__main__"

test_module.py

print("# 모듈의 __name__ 출력하기")
print(__name__)
print()

main.py

import test_module
print("# 메인의 __name__ 출력하기")
print(__name__)
print()
#코드 실행 지점의 name은 __main__으로 나오고
#실행 지점이 아닌 파일(모듈)의 name은 파일명으로 나옴
#엔트리포인트 : 실행지점
if __name__=="__main__":
    #이 py파일이 엔트리포인트(직접실행)으로 실행되었다면
    #모듈로 쓰이지 않는 경우
    print("엔트리 포인트로 실행 되었음")

 

new\test_module.py

PI = 3.141592
def number_input():
    output = input("숫자 입력> ")
    return float(output)
def get_circumference(radius):
    return 2 * PI * radius
def get_circle_area(radius):
    return PI * radius * radius
print("get_circumference(10):", get_circumference(10))
print("get_circle_area(10):", get_circle_area(10))

new\main.py

import test_module as test

radius = test.number_input()
print(test.get_circumference((radius)))
print(test.get_circle_area((radius)))

조건

#파일명: gilminjun
# if name != __main__ 활용해서 모듈 사용자에게 설명서 제공
#(어떤 함수가 있고, 사용법이 어떻게 되는지, 매개변수 설명)

def hello(a):
    for i in range(a):
        print("hello")
if __name__ != '__main__':
    print("이 모듈은 기능 1개를 제공하고 기능명은 hello이고 매개변수를 입력해주세요")

gilminjun.py

def triangle_area(base, height):
    return base * height / 2

def rectangle_area(base, height):
    return base * height

pi = 3.141592
def circle_area(radius):
    return pi * radius ** 2

if __name__ == "__main__":
    print("이 모듈은 도형의 넓이를 계산하는 기능을 제공합니다.")
    print("함수명 : triangle_area(base, height)")
    print("함수명 : rectangle_area(base, height)")
    print("함수명 : circle_area(radius)")
    print("매개변수 설명:")
    print("base : 밑변 길이")
    print("height : 높이")
    print("radius : 반지름")
    print("사용 예시:")
    print("import gilminjun")
    print("area = gilminjun.triangle_area(10, 5)")
    print("print(area)")

test.py

import gilminjun
areat = gilminjun.triangle_area(10, 5)
print(areat)
arear = gilminjun.rectangle_area(10, 5)
print(arear)
areac = gilminjun.circle_area(5)
print(areac)

패키지: 모듈이 모여 구조를 이룬 것

패키지 만들기

인코딩: 숫자와 알페벳을 대응하는 방법, 0과1

반대는 디코딩

ASCII, 유니코드, (utf)

 

이미지 읽어 들이고 저장하기

test_module.py
0.00MB
main.py
0.00MB
test.py
0.00MB
gilminjun.py
0.00MB
binary_download.py
0.00MB

 

패키지 설치

클래스

OOP(객체 지향 프로그래밍): 현실 세계의 객체의 개념을 기반으로 데이터를 속성(필드)과 기능(메서드)으로 묶어 프로그램을 설계하는 방식

POP(절차 지향 프로그래밍): 프로그램을 일련의 순차적인 처리 과정으로 바라보는 방식, 프로그램이 수행해야 할 일을 순서대로 나열하고, 각 작업을 독립적인 함수(프로세스)로 분리하여 작성

 

객체: 속성과 메소드를 갖는것(클래스 기반으로 만듦), 속성을 가질 수 있는 모든 것

추상화: 프로그램에서 필요한 요소만을 사용해서 객체를 표현하는 것

 

class 선언

class 클래스 이름:

    클래스 내용

 

클래스는 클래스 이름과 같은 함수(생성자)를 사용해 객체를 만듦

 

인스턴트 이름(변수 이름) = 클래스 이름()

클래스 => 붕어빵 틀

인스턴스 => 붕어빵

 

생성자: 클래스 이름과 같은 함수

class 클래스 이름:

    def __init__(self, 추가적인 매개변수):

        pass

class Student:
    def __init__(self,name,korean,math,english,science): # 생성자함수 정의
        self.name=name#자기자신
        self.korean=korean
        self.math=math
        self.english=english
        self.science=science
students = [
    Student("윤인성", 87,98,88,95),
    Student("연하진", 92,98,96,98),
    Student("구지연", 76,96,94,90),
    Student("나선주", 98,92,96,92),
    Student("윤아린", 95, 98, 98, 98),
    Student("윤명월", 64, 88, 92, 92)
]
students[0].name
students[0].korean
students[0].math
students[0].english
students[0].science
class Test:
    def __init__(self, name):
        self.name = name
        print("{} - 생성되었습니다.".format(self.name))
    def __del__(self):# 자동으로 처리
        print("{} - 파괴되었습니다.".format(self.name))

print("111111")
test = Test("A")
print("222222")
#가비지 컬렉터: 더 사용할 가능성이 없는 데이터를 메모리에서 제거하는 역할

생성자 : 인스턴스가 생성
소멸자 : 인스턴스가 제거, 클래스 내 __del__함수를 선언해서

 

메소드: 클래스가 가지고 있는 함수

class human:
    def __init__(self, name):
        self.name = name
    def __del__(self):
        print("파괴")
    def walk(self): # 인스턴스의 기능
        print("앞으로 걷는다")
    def eat(self):
        print("음식 섭취")

h = human("A")#객체(인스턴스) 생성
h.walk() #기능(메서드 호출)

isinstance() 여부 확인 => T/F

instance(인서턴스, 클래스)

instance() 함수와 type() 함수로 확인하는 것의 차이

 

isinstance() 함수 활용

__str__()함수

클래스 변수

class 클래스 이름:

    클래스 변수 = 값

class test:
    x=10 #클래스 변수 : 클래스 구조 내 변수 : 객체 간 공유
    @classmethod # 클래스 메서드
    def count(cls): #self x cls 표기
        pass
    def __init__(self, name):#인스턴스 메서드
        self.name = name
        test.x=test.x+10

print(test.x)#10
t1=test("1번")
t2=test("2번")
test.count()
#클래스 변수, 클래스 메서드 -> 클래스명, 변수 or 클래스명, 클래스메서드명()
#인스턴스메서드 -> 인스턴스.인스턴스메서드명()

class 클래스 이름:

    @classmethod

    def 클래스 함수(cls, 매개변수):

        pass

class Student:
    count = 0
    students = []

    @classmethod
    def print(cls):
        print("------학생 목록------")
        print("이름\t총점\t평균")
        for student in cls.students:
            print(str(student))
        print("------ ------ ------")
    def __init__(self, name, korean, math, english, science):
        self.name = name
        self.korean = korean
        self.math = math
        self.english = english
        self.science = science
        Student.count += 1
        Student.students.append(self)

    def get_sum(self):
        return self.korean + self.math + self.english + self.science

    def get_average(self):
        return self.get_sum() /4

    def __str__(self):
        return str("{}\t{}\t{}".format(self.name, self.get_sum(), self.get_average()))

Student("윤인성", 87, 98, 88, 95)
Student("연하진", 92, 98, 96, 98)
Student("구지연", 76, 96, 94, 90)
Student("나선주", 98, 92, 96, 92)
Student("윤아린", 95, 98, 98, 98)
Student("윤명월", 64, 88, 92, 92)
Student("김미화", 82, 86, 98, 88)
Student("김연화", 88, 74, 78, 92)
Student("박아현", 97, 92, 88, 95)
Student("서준서", 45, 52, 72, 78)

Student.print()

class animal:
    def __init__(self, name, age):
        self.name = name #밖에서 접근 가능 pub
        self.__age = age #밖에서 접근 불가 pri
a=animal('동물이름', '동물나이')
print(a.name)
#print(a.__age)
#접근 불가 -> 수정 불가
a.name="강아지"
a.__age(50)
print(a.name)
print(a.__age)
a.__age=1000
print(a.__age)

private var 만드는 이유 : 데이터 보호
데이터 무결성 유지
캡슐화 (내부 로직 은폐)

프라이빗 변수 수정/참조 => 게터/세터
getter : 참조
setter : 수정

프라이빗 변수의 값을 추출하거나 변경할 목적으로, 간접적으로 속성에 접근하도록 해주는 함수

import math

class Circle:
    def __init__(self, radius):
        self.__radius = radius
    def get_circumference(self):
        return 2 * math.pi * self.__radius
    def get_area(self):
        return math.pi * (self.__radius ** 2)

    def get_radius(self):
        return self.__radius
    def set_radius(self, value):
        self.__radius = value

circle = Circle(10)
print("# 원의 둘레와 넓이를 구합니다.")
print("원의 둘레:", circle.get_circumference())
print("원의 넓이:", circle.get_area())
print()

print("#__radius에 접근합니다.")
print(circle.get_radius())
print()

circle.set_radius(2)
print("# 반지름을 변경하고 원의 둘레와 넓이를 구합니다.")
print("원의 둘레:", circle.get_circumference())
print("원의 넓이:", circle.get_area())

@property 조회

@ radius.setter 수정

 

상속: 어떤 클래스를 기반으로 그 속성과 기능을 물려받아 새로운 클래스를 만드는 것

다중 상속: 다른 누군가가 만들어 놓은 형태들을 조립해서 내가 원하는 것을 만드는 것

 

부모클래스, 슈퍼클래스, 기반클래스
자식클래스, 서브클래스, 파생클래스

 

자식 클래스로써 부모의 함수 재정의(오버라이드)하기

상속: 다른 클래스의 모든 것을 물려 받아 새로운 클래스 만듬(IS-A 관계 나타낼 때 활용)

구성: 다른 클래스를 갖고, 필요할 때마다 활용하는 것(HAS-A 관계)

 

게임 만들기

사용자 입력

tick(사용자 입력 1번에 1틱)

실행은 터미널에서(cmd, powershell)

4인 1조

260106.py
0.01MB