멋쟁이사자처럼 오늘 공부 후기 챌린지 - 그로스 마케팅 편
이런 고민을 하고 있다면, 지금 이 순간에도 멋쟁이사자처럼에서 그로스 마케팅 과정을 수강하며 자신만의 속도로 성장 중인 수강생들을 주목해보세요.
배우고 잊어버리는 건 누구나 겪는 일이에요. 하지만 멋쟁이사자처럼 부트캠프는 단순히 배우는 것에 그치지 않고, 배운 내용을 내 것으로 만드는 방법까지 고민하고 있어요. 그렇다면, 배운 것을 가장 효과적으로 습득하는 방법은 무엇일까요? 바로 기록하고 정리하는 것이죠. 배운 내용을 정리하고 기록하면, 기억은 오래 남고 실전에서도 활용할 수 있으니까요!
멋쟁이사자처럼 부트캠프는 수강생들이 배운 내용을 정리하고 공유할 수 있도록 TIL (Today I Learned) 블로그 챌린지를 진행하고 있어요. 그래서 오늘, 강사님과 멘토님에게 배운 내용을 체계적으로 기록하며 성장하고 있는 수강생의 이야기를 가져왔어요. 작고 사소해 보일지라도 배운 내용을 정리하고, 기록하면서 성장한 이들의 소중한 경험을 지금 확인해 보세요.
학습 목표
Python 기본 문법 이해
Python 제어문(조건문) 실습
Python 데이터 구조 실습
Python 함수, 클래스, 모듈과 패키지 실습
1. Python Grammer
1) Variable
# 정수형 변수
integer_var = 100
print(type(integer_var)) # 출력: <class 'int'>
# 실수형 변수
float_var = 25.4
print(type(float_var)) # 출력: <class 'float'>
# 문자열 변수
string_var = "Python"
print(type(string_var)) # 출력: <class 'str'>
# 불리언 변수
bool_var = True
print(type(bool_var)) # 출력: <class 'bool'>
2) Builit in Data type
# Numeric
int_num = 42 #정수
float_num = 3.14 #실수
complex_num = 1 + 2j #복소수
# Sequence
string_val = "Python is fun" #문자열
list_val = [1, 2, 3, 4, 5] #리스트 (순서o 변경o)
tuple_val = (1, 2, 3, 4, 5) #튜플 (순서o 변경x)
# Set
set_val = {1, 2, 3, 4, 5} #세트 (순서x 중복x)
set_val.add(6)
# Mapping
dict_val = {"name": "Alice", "age": 30} #딕셔너리 (key-value)
# Boolean
is_open = True #True or False
is_closed = False
# None
none_val = None
2. Conditional Statements
예제 2: 짝수와 홀수 판별
number = 7
if number % 2 == 0: # %: 나머지 //: 몫
print(f"{number}는 짝수입니다.") # f-string: 문자열 안에 {변수} 삽입
else:
print(f"{number}는 홀수입니다.")
#5. ROAS (광고 수익률) 분석
# 변수 설정
ad_spend = 800000 # 광고비 (원)
revenue = 4000000 # 광고를 통해 발생한 매출 (원)
# ROAS 계산 및 평가
if ad_spend > 0:
roas = (revenue / ad_spend) * 100
print(f"ROAS: {roas:.2f}%") # 2f: 소수점 둘째 자리까지 출력
if roas >= 400:
print("ROAS가 우수합니다. 광고 전략을 유지하세요.")
elif 200 <= roas < 400:
print("ROAS가 평균 수준입니다. 개선할 여지가 있습니다.")
else:
print("ROAS가 낮습니다. 광고 전략을 조정하세요.")
else:
print("광고비가 0원이므로 ROAS를 계산할 수 없습니다.")
3. Python Data Structure
1) List [ ]
리스트 생성 및 요소 접근
# 리스트 생성
campaigns = ["봄맞이 할인", "여름 세일", "가을 이벤트", "겨울 프로모션"]
# 리스트 인덱스 사용
print(campaigns[0]) # '봄맞이 할인'
print(campaigns[-1]) # '겨울 프로모션' (음수 인덱스는 뒤에서부터)
리스트 요소 수정 및 추가
# 리스트 요소 변경
campaigns[1] = "여름 할인"
print(campaigns) # ['봄맞이 할인', '여름 할인', '가을 이벤트', '겨울 프로모션']
# 리스트에 새로운 요소 추가 .append
campaigns.append("봄 시즌 프로모션")
print(campaigns) # ['봄맞이 할인', '여름 할인', '가을 이벤트', '겨울 프로모션', '봄 시즌 프로모션']
리스트 삭제
# 특정 요소 삭제
del campaigns[2] # '가을 이벤트' 삭제
print(campaigns) # ['봄맞이 할인', '여름 할인', '겨울 프로모션', '봄 시즌 프로모션']
# 리스트 전체 삭제 .clear
campaigns.clear()
print(campaigns) # []
리스트 for 반복문
# 리스트의 각 요소 출력
for campaign in campaigns:
print(f"캠페인: {campaign}")
리스트 슬라이싱
# 리스트 일부 가져오기
print(campaigns[1:3]) # 인덱스 1부터 3 이전까지의 요소 가져오기 => ['여름 할인', '겨울 프로모션']
2) Tuple ( )
# 튜플 생성
marketing_channels = ("Google Ads", "Facebook Ads", "Email Marketing")
# 요소 접근
print(marketing_channels[0]) # 'Google Ads'
print(marketing_channels[-1]) # 'Email Marketing'
# 튜플은 수정할 수 없음
marketing_channels[0] = "TikTok Ads" # TypeError
딕셔너리 생성 및 요소 접근
# 딕셔너리 생성
campaign_performance = {
"봄맞이 할인": {"CTR": 0.12, "CR": 0.05},
"여름 세일": {"CTR": 0.15, "CR": 0.07},
"가을 이벤트": {"CTR": 0.08, "CR": 0.03}
}
# 특정 키의 값 조회
print(campaign_performance["봄맞이 할인"]) # {'CTR': 0.12, 'CR': 0.05}
print(campaign_performance["봄맞이 할인"]["CTR"]) # 출력: 0.12
딕셔너리 요소 추가 및 수정
# 새로운 캠페인 데이터 추가
campaign_performance["겨울 프로모션"] = {"CTR": 0.10, "CR": 0.06}
# 기존 캠페인 데이터 수정
campaign_performance["봄맞이 할인"]["CTR"] = 0.13
딕셔너리 for 반복문
for campaign, metrics in campaign_performance.items():
print(f"{campaign}: 클릭률 {metrics['CTR']}, 전환율 {metrics['CR']}")
# 봄맞이 할인: 클릭률 0.12, 전환율 0.05
# 여름 세일: 클릭률 0.15, 전환율 0.07
# 가을 이벤트: 클릭률 0.08, 전환율 0.03
4) Set { }
# 집합 생성
active_users = {"user1", "user2", "user3"}
new_users = {"user2", "user3", "user4", "user5"}
# 합집합 (Union) |
all_users = active_users | new_users # {'user1', 'user2', 'user3', 'user4', 'user5'}
# 교집합 (Intersection) &
common_users = active_users & new_users # {'user2', 'user3'}
4. Loops
1) for 반복문
: 시퀀스의 각 항목에 대한 반복
# 리스트/튜플의 각 항목 출력
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit) # apple banana cherry
# 범위의 숫자 반복
for i in range(5):
print(i) # 0 1 2 3 4
# 문자열의 각 문자 출력
word = "Python"
for letter in word:
print(letter) # p y t h o n
# 딕셔너리의 키와 값 출력
student_scores = {"Sumi": 85, "Charls": 92, "Charlie": 78}
for student, score in student_scores.items():
print(f"{student}: {score}")
2) while 반복문
: 조건문이 true일 동안 코드 반복
# 숫자 세기
count = 0
while count < 5:
print(count)
count += 1 # 0 1 2 3 4
# 사용자 입력에 따른 반복
response = ""
while response != "exit":
response = input("종료하려면 'exit'를 입력하세요: ")
print(f"당신의 입력: {response}")
3) 반복문 제어 키워드
break : 종료
continue : 건너뛰기
else : break로 종료되지 않았을 경우 = 반복문이 끝까지 정상 실행됨
예제 4: 피보나치 수열
a, b = 0, 1
while a < 100:
print(a, end=' ') # end = '' : 한 줄로 출력 = print()
a, b = b, a + b
print() # 0 1 1 2 3 5 8 13 21 34 55 89
예제 6: 중첩 반복문을 사용한 별 모양 출력
# 바깥쪽 반복문: 0부터 4까지 반복
for i in range(5):
# 안쪽 반복문: 현재 i 값 + 1 만큼 '*' 출력
for j in range(i + 1):
print('*', end='') # '*'를 출력하고 줄바꿈 없이 유지
print() # 안쪽 루프 종료 후 줄바꿈하여 다음 줄로 이동
# *
# **
# ***
# ****
# *****
예제 7: 반복문 in 리스트
numbers = [1, 2, 3, 4, 5]
squares = [n ** 2 for n in numbers]
print(squares) # [1, 4, 9, 16, 25]
예제 11: 무한 루프
# while True: 문에서 True는 항상 참(1)으로 평가되므로 루프가 계속 실행됨
while True:
name = input("이름을 입력하세요 (종료하려면 'exit' 입력): ")
if name == "exit":
break
print(f"안녕하세요, {name}!")
예제 15: 거꾸로 숫자 세기
for i in range(10, 0, -1): #10은 시작 값, 0은 종료 값(포함x), -1은 감소하는 간격
print(i, end=' ') # 10 9 8 7 6 5 4 3 2 1
5. Functions
def add(a, b): # a, b : 매개변수
return a + b #결과를 반환하여 저장
result = add(3, 5) # 3, 5 : 인수
print(result) # 출력: 8
def greet(name="Guest"): # name의 기본값 지정
print(f"안녕하세요, {name}님!")
greet() # 출력: 안녕하세요, Guest님!
# 기본값이 없으면 생략되거나 None
greet("Charls") # 출력: 안녕하세요, Charls님!
* 가변 매개변수
# * : 인수 다수 받기
def add_all(*args): #모든 인수를 튜플 args에 저장
total = 0
for num in args:
total += num
return total
result = add_all(1, 2, 3, 4, 5)
print(result) # 출력: 15
** 키워드 가변 매개변수
# ** : 키워드 인수(key:value) 받기
def print_kwargs(**kwargs): # 인수를 딕셔너리 kwargs에 저장
for key, value in kwargs.items():
print(f"{key}: {value}")
print_kwargs(name="Sumi", age=25, city="Seoul")
람다 함수
add = lambda x, y: x + y
print(add(3, 5)) # 출력: 8
이때 add는 함수가 아니다!
람다 함수는 lamda 키워드를 사용해 정의된 함수, 즉 이름이 없는 함수.
위 예제의 경우 람다 함수를 변수 add에 할당하여 add를 함수처럼 동작할 수 있는 역할을 부여.
재귀 함수
def factorial(n):
if n == 1:
return 1 # 종료 조건 필수
else:
return n * factorial(n - 1) # 함수 안에 자기 자신 포함
print(factorial(5)) # 출력: 120
6. Class
class Person:
def __init__(self, name, age):
# __init__ : 클래스 초기 속성 설정 메소드
# self : 인스턴스를 가리키는 참조 변수 (꼭 self여야 되는 건 아니지만 관습)
self.name = name # 클래스의 name 속성에 __init__의 매개변수 name을 저장하겠다!
self.age = age
def greet(self):
print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")
# 인스턴스(객체) 생성
person1 = Person("Sumi", 30) # __init__ 메서드에 인수 전달
person2 = Person("Charls", 25)
# 인스턴스 변수 접근
print(person1.name, person2.age) # Sumi 30
# 메서드 호출
person1.greet() # 출력: 안녕하세요, 제 이름은 Sumi이고, 나이는 30살입니다.
person2.greet() # 출력: 안녕하세요, 제 이름은 Charls이고, 나이는 25살입니다.
부모 클래스와 서브 클래스
class Animal: # 기본 클래스
def __init__(self, name):
self.name = name
def speak(self):
pass
class Cat(Animal): # 서브 클래스1
def speak(self):
return f"{self.name}가 야옹합니다."
class Dog(Animal): # 서브 클래스2
def speak(self):
return f"{self.name}가 멍멍합니다."
클래스 메서드와 정적 메서드
class MyClass:
class_variable = "클래스 변수"
def __init__(self, value):
self.instance_variable = value
@classmethod
def class_method(cls):
return cls.class_variable
@staticmethod # cls, self와 독립적인 메서드
def static_method():
return "정적 메서드"
# 클래스 메서드 호출
print(MyClass.class_method()) # 출력: 클래스 변수
# 정적 메서드 호출
print(MyClass.static_method()) # 출력: 정적 메서드
데이터 캡슐화 (Private Variable)
class EncapsulatedClass:
def __init__(self, value):
self.__hidden_variable = value # __(언더바 두 개): 프라이빗 변수
def get_hidden_variable(self): # get_: 프라이빗 변수 값을 가져옴
return self.__hidden_variable
def set_hidden_variable(self, value): #set_: 프라이빗 변수 값을 변경함
self.__hidden_variable = value
# 인스턴스 생성
obj = EncapsulatedClass(10)
# 프라이빗 변수 접근
print(obj.get_hidden_variable()) # 출력: 10
obj.set_hidden_variable(20)
print(obj.get_hidden_variable()) # 출력: 20
# 직접 접근하면?
print(obj.__hidden_variable) # Error
7. Module & Package
# my_class.py 파일을 import
from my_class import MyClass # MyClass는 my_class.py 파일 속 클래스 이름
To Do list
로또 번호 발생기
궁합 계산
공부는 배울 때 끝나는 게 아니라, 되새기고 활용할 때 완성돼요. 그런 의미에서 오늘 소개한 이야기는 단순한 후기가 아니라, 학습을 더 효과적으로 만들고 나만의 것으로 만드는 과정이었을 거예요. 여러분도 배운 내용을 정리하고, 더 오래 기억하는 습관을 만들어 보세요. 작은 차이가 결국 큰 결과를 만들 테니까요!
내가 배운 것을 글로 정리하는 것이 처음에는 어렵게 느껴질 수도 있지만 멋쟁이사자처럼과 함께 꾸준히 기록하다 보면 스스로 변화하고 있다는 걸 깨닫게 될 거예요. 자! 이제 여러분 차례에요. 언제나 여러분의 곁에는 멋쟁이사자처럼이 있으니 고민하지 말고 배움을 기록하고, 성장의 발자취를 남겨보세요!
홈 : 멋사 부트캠프
멋쟁이사자처럼의 13년 교육 노하우로 IT 취업의 꿈을 현실로!

