본문 바로가기
Python

[TIL]24.02.29 내일배움캠프 3주차 + 3과제 Class

by Byeong 2024. 3. 1.

3번 과제는 class함수의 이해도가 있어야 풀이가 가능한 문제였다.

 

문제를 풀기 전에 class함수를 알고 가자

 

 

class

구글링이나 강의를 들어 찾아봤을 때는 다들 무언가에 비유해서 말해 줬다. 

예를 들면 공장, 게임, 와플기계, 붕어빵 기계 등 다양하게 설명해 줬지만 나에게는 그 방법이 좀 더 어려웠던 거 같다.

그래서 나는 그냥 내가 편하게 쓰기 위한 함수 귀찮은 나를 위해 도와주는 친구? 그리고 def 함수보다 더 편하게 사용이 가능한 함수라고 이해를 했다.

 

class함수에는 메서드, 어트리뷰트, 인스턴트 어려워 보이는 용어지만 아주 쉽게 정리하면

메서드(method) : class 내의 저장된 함수

어트리뷰트(attribute) : 메서드 안의 변수 

인스턴스(instance) :  class의 내용에 맞게 만든 것이 인스턴트 

 

이렇게 이해하니 아주 편했다. 

(틀린 부분이 있다면 알려주시면 감사하겠습니다.

 

 

 

과제 3. 클래스 사용해 보기

 

[ 이 과제에서는 간단한 소셜 미디어 플랫폼의 회원과 게시물을 관리하는 프로그램을 개발합니다.]

 

과제의 내용은 

더보기

과제 내용:

  1. Member 클래스와 Post 클래스를 정의하세요.
  2. Member 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.
    • 회원 이름 (name)
    • 회원 아이디 (username)
    • 회원 비밀번호 (password)
  3. Member 클래스에는 다음과 같은 메소드를 가지고 있어야 합니다.
    • 회원 정보를 print해주는 display (회원이름과 아이디만 보여주고 비밀번호는 보여줘서는 안됩니다!)
  4. Post 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.
    • 게시물 제목 (title)
    • 게시물 내용 (content)
    • 작성자 (author) : 회원의 username 이 저장되어야 함!
  5. 회원 인스턴스를 세개 이상 만들고 members 라는 빈리스트에 append를 써서 저장해주세요
    1. members 리스트를 돌면서 회원들의 이름을 모두 프린트 해주세요
  6. 각각의 회원이 게시글을 세개 이상 작성하는 코드를 만들어주세요.(회원이 세명이명 총 9개 이상의 post 인스턴스가 만들어져야 합니다). 만들어진 게시글 인스턴스들은 posts 빈리스트에 append를 써서 저장해주세요
    1. for 문을 돌면서 특정유저가 작성한 게시글의 제목을 모두 프린트 해주세요
    2. for문을 돌면서 ‘특정 단어’가 content에 포함된 게시글의 제목을 모두 프린트 해주세요

 

 

 

 

1.  class Member을 정의 및 print

class Member:
    def __init__(self, name, username, password):
        self.name = name
        self.username = username
        self.password = password


    def display(self):
        print(f'회원 이름 : {self.name} / 회원 아이디 : {self.username}')

 

메서드(method)에 __init__를 사용해서 인스턴트(instance)가 실행될 때 사용이 가능하게 만들었다.

__init__은 initialize으로 '초기값 설정', '초기화'로 git init과 비슷하세 생각하면 될 거 같다. 

 self는 자기 자신 이라는데 class명인 자기 자신을 가리킨다. self를 첫 class 메서드(method)에서 사용하지 않으면 class안에 있는 다른 함수들에서는 사용을 할 수 없기 때문이다.

 

members = []


user_1 = Member('봄', 'spring', '123123123')
user_2 = Member('여름', 'summer', '123123')
user_3 = Member('가을', 'fall', '23asdada')

user_1.display()
user_2.display()
user_3.display()

members.append(user_1)
members.append(user_2)
members.append(user_3)


print('회원 이름')
for member in members:
    print(member.name)

 

위는 코드를 통해 한하나 인스턴스(instance)에 추가하고 회원 이름과 아이디만 출력해 주었다.

그리고 for 문을 돌며 회원의 이름만 출력을 했다. 

 

처음에는 

print(members[0])

print(members[user_1.name])

 

이런 식으로 리스트 안에 딕셔너리 안에 문자를 뽑아 내려했지만 될 리가 있나 😄 

 

 

 

2. Post 함수 정의

class Post():
    def __init__(self, title, content, author):
        self.title = title
        self.content = content
        self.author = author

 

class Member과 비슷 한 방법으로 정의하고 

 

각 회원마다 게시물을 3개씩 만들었다.

 

처음에는 하나하나 막일로 만들었다.

post1_user_1 = Post(title='1', content='111a111', author='봄')
post2_user_1 = Post(title='2', content='222ㄴ222', author='봄')
post3_user_1 = Post(title='3', content='333ㄷ333', author='봄')

posts.append(post1_user_1)
posts.append(post2_user_1)
posts.append(post3_user_1)


post1_user_2 = Post(title='ㄱ', content='ㄱㄱ1ㄱㄱ', author='여름')
post2_user_2 = Post(title='ㄴ', content='ㄴㄴcㄴㄴ', author='여름')
post3_user_2 = Post(title='ㄷ', content='ㄷㄷ3ㄷㄷ', author='여름')

posts.append(post1_user_2)
posts.append(post2_user_2)
posts.append(post3_user_2)


post1_user_3 = Post(title='a', content='aaaㄱaaa', author='가을')
post2_user_3 = Post(title='b', content='bbb1bbb', author='가을')
post3_user_3 = Post(title='c', content='cccaccc', author='가을')

posts.append(post1_user_3)
posts.append(post2_user_3)
posts.append(post3_user_3)

 

for 문을 돌며 한하나 만들면 좋겠다는 생각을 가지고 있는어서 팀원에게 질문도 하고 튜터님 강의 도 듣으며 밑에와 같은 방식을 만들었다.

(for문과 class의 이해도와 활용도가 높아졌다.)

 

for member in members:
    for i in range(3):
        post = Post(
            title=f'{member.name} -{i}',
            content=f'"콘텐츠"{member.name}',
            author=f'{member.username}'
        )
        posts.append(post)

 

for문을 돌며 게시물을 만들고 posts에 저장하는 코들를 만들었다.

 

첫 줄부터 설명을 하면 members 리스트 안에 있는 딕셔너리를 member를 통해 한 명 한 명 불러오고 

다시 for 문을 통해 class Post를 통해 하나하나 만들고 posts에 저장하는 방식이다.

코드를 하나하나 읽으며 내용을 이해하니 너무 재미있었다.

 

3. 특정유저 검색 와 특정단어 검색

post_user = input('특정유저를 검색합니다.')
for i in posts:
    if post_user == i.author:
        print(i.title)


post_input =input('특정단어')
for i in posts:
    if post_input == i.content:
        print(i.titler)

 

이런 식으로 input을 통해 입력한 값을 for문을 통해 posts에 들어 있는 값을 찾아 일치하면 print 하는 방식이다.

이 부분은 추가 과제의 부분이었는데 추가 과제 중

3. 심화)비밀번호 해싱이 무엇인지 공부한 후 hashlib 라이브러리를 써서 회원 비밀번호를 해시화하여 저장하게 해주세요.

 

이 부분이 있었는데 import hashlib를 하는 방법인데... 해결을 못했다. 

 

 

 

마무리

 29일 하루 일을 쉬며 집에서 컴퓨터 앞에 앉아 python을 공부하니 더욱 재미있었다. 

혼자 그냥 공부를 하는 12시간씩 한다면 지루 하겠지만 '내일 배움 캠프'를 통해 팀원들에게 질문하고 같이 풀어 나가니까 좀 더 의욕이 생겨나고 해야 한다는 느낌을 받아 너무 좋다. 

 아직 4번 과제와 듣지 못한 강의들이 있지만 주말 동안 시간을 만들어 공부하며 풀어야겠다.

(어제 침대에 잠시 누웠다가 기절하니 아미 12시 여서 이제야 올린다 ㅠ)