aio3기 오프라인 수업 복기

aio3기 오프라인강의 회고 2

doomrender 2026. 9. 17. 18:07

20.함수에서 화면 출력값과 반환값은 독립적인 존재이다. 같은게 아니다.
예)
print("안녕하세요")는 "안녕하세요"를 반환하는 게 아닙니다.
그냥 화면에 보여주는 겁니다.
반환값은 None이다.

예)
def greet():
    print("안녕하세요")
result = greet()
print(result)
를 실행하면 결과값은;

안녕하세요
None

이다.
파이선 자체는 우항을 먼저 계산(=실행)하고 좌항으로 넘어가기 때문에
20-1.greet()이라는 함수를 실행함.
20-2.결과로 안녕하세요 가 '화면에'출력됨
20-3. 하지만 반환값은 None임. 즉 우항은 None이 됨
20-4 이제 result = None 이니 "None"을 result에 대입함
20-5. print(result)는 print("None") 이 됨.
20-6. 그에 따라 화면에 None이 출력됨.

21. 함수에 반환값의 표현이 없으면(= result 언급이 없으면) result None이 생략된 것과 같다.
예.
def greet():
    print("안녕하세요")
는

def greet():
    print("안녕하세요")
    return None
와 같다.

22. 즉, 반환값은 default이고, print는 그에 딸린 곁다리다.
다시말해, 함수는 반환값을 무조건 도출하고,(그렇다고 자동으로 화면에 출력되지는 않음.)
그 반환값이 return으로 명시가 안되어있으면 기본값처럼 None이 반환값으로 출력된다.

예1.
def b():
    return "안녕하세요"
에서 b()을 실행하면 아무것도 안뜨고
print(b())을 실행하면 "안녕하세요"가 뜬다

예2:
def greet():
    print("안녕하세요")
print(greet())

실행 순서는 이렇습니다.

22-1.greet() 실행
22-2.함수 안의 print("안녕하세요") 실행
22-3.화면에 안녕하세요 출력
22-4.greet()는 return이 없으므로 None 반환
22-5.바깥의 print(...)가 그 None을 출력

그래서 최종 출력은:
안녕하세요
None

23. 틀린 문제:
def test():
    return "A"
    print("B")
이면
print(test())로 화면에 출력되는 값은?

return을 만나면 함수가 종료되어서 A만 출력된다.


(정리 필요)
24.
self는 지금 사용하는 객체다
first_book.summary()를 호출하면 self는 first_book이다. second_book.summary()를 호출하면 self는 second_book이다. 메서드를 정의할 때는 첫 매개변수에 self를 적지만 호출할 때는 Python이 현재 객체를 전달한다.
self.title은 현재 책 객체의 제목이다.
first_book.title과 second_book.title은 서로 다른 객체에 저장된 값이다.
summary()는 값을 출력하지 않고 반환하므로 다른 코드에서도 결과를 사용할 수 있다.

관련 데이터와 그 데이터를 다루는 동작을 객체 안에 모으는 것을 캡슐화라고 한다. 이 예제의 title은 일반 속성이므로 first_book.title = "수정"처럼 객체 밖에서 직접 바꿀 수 있다. 바뀐 제목은 첫 번째 책의 summary()에만 반영된다.


25.
class Counter:
    created_count = 0

#클래스 속성임. 모든 counter 클래스는 이 것을 가진다.

    def __init__(self, start: int = 0) -> None:
        self.value = start
#이거는 인스턴스 속성임. 인스턴스에 뭔가를 하겠다.
인스턴스 속성은 init 함수 내에서 정의됨
        Counter.created_count += 1

    def increment(self) -> None:
        self.value += 1


first = Counter()
second = Counter(start=10)

first.increment()
first.increment()
second.increment()



26.
def increment(self):
 self.value += 1 
 self.value += 1는 value라는 속성 값에 +1을 한다는 뜻

27.
class Task:
    def __init__(self, title: str) -> None:
        self.title = title
        self.done = False


'self.done = False'는 초기값을 False로 한다는 뜻.
'self.title = title' 에서 좌측title은 .title로 속성 문법이고, 우측title은 title 자체로 변수의 문법이다.
그래서 이름이 title로 같아도 다른 객체로 구분한다.


28.
조건 표현식 또는 삼항 연산자(ternary expression):
일반적인 if문과는 조금 다른 문법

<보통의 if문>
if self.done:
    status = "완료"
else:
    status = "진행 중"

<(이걸 한 줄로 줄여 쓴 것이 바로)조건 표현식>
atus = "완료" if self.done else "진행 중"