ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python, class, 인스턴스 생성 - 간단한 sns platform 코딩
    Python 2024. 7. 5. 19:44

    파이썬, class를 사용하여 간단한 sns platform의 유저 정보를 받는 코딩 문제

     

    저번 과제 피드백이 절차지향적으로 코드를 잘 짰다는 걸 보면.. 아마도.. 객체지향적으로는 단단함이 부족하다는 의미가 아닐까 싶었다.. 그래서 이번 과제가 class를 이용한 과제인만큼 객체지향적으로 코드를 짜보자고 다짐했다.

     

     

    구현해야 할 조건은 아래와 같다.


    1. Member 클래스

    • 회원 이름 (name)
    • 회원 아이디 (username
    • 회원 비밀번호 (password)

    *회원 정보를 print해주는 display: 회원이름과 아이디만 보여주고 비밀번호는 보여줘서는 안됨

     

    2. Post 클래스

    • 게시물 제목 (title)
    • 게시물 내용 (content)
    • 작성자 (author) : 회원의 username 이 저장되어야 함!

    3. 회원 인스턴스 세개 이상  생성

    • members 라는 빈리스트에 append를 써서 저장, members 리스트를 돌면서 회원들의 이름을 모두 프린트
    • 각각의 회원이 게시글을 세개 이상 작성하는 코드 짜기 (회원이 세명이명 총 9개 이상의 post 인스턴스가 만들어져야 함)
    • 만들어진 게시글 인스턴스들은 posts 빈리스트에 append를 써서 저장
    • for 문을 돌면서 특정유저가 작성한 게시글의 제목을 모두 프린트
    • for문을 돌면서 ‘특정 단어’가 content에 포함된 게시글의 제목을 모두 프린트

    1. 기본적인 것만 구현한 코드

     

    비밀번호 해싱을 위해 hashlib를 임포트 해줬다.

    근데 사실 해싱은 처음이라서 간단하게 코드를 짰다. 이 정도로는  보안이 약하기 때문에 실제로 sns 플랫폼을 개발한다면 더 강한 암호화 코드가 필요할것이다.

    import hashlib # 비밀번호 해싱을 위한 hashlib 라이브러리 임포트
    
    # 멤버 클래스
    class Member: 
        def __init__(self, name, username, password):
            self.name = name
            self.username = username
            self.password = self.hashed_pw(password)
    
    # 사실 이 정도 해싱으로는 보안이 약해서 더 강한 암호화가 필요하지만 아직 잘 몰라서 간단하게 구현했다.
        def hashed_pw(self, password):
            hash_obj = hashlib.sha256()
            hash_obj.update(password.encode())
            return hash_obj.hexdigest()
    
    # 포스트 클래스
    class Post:
        def __init__(self, title, content, username):
            self.title = title
            self.content = content
            self.username = username # 출력은 Author로 해줄거다.

     

    만들어야 할 class는 2개이다. Member 클래스Post 클래스

    각각 가져야 할 속성값을 주고, 포스트에서 작성자는 Author로 출력되지만 아이디값이기 때문에 username으로 줬다.

     

     

    # 멤버 인스턴스 생성
    members = [
        Member("김우린", "lina", "1q2w3e4r"),
        Member("이상현", "shlee", "qqqq1111"),
        Member("이새예", "saeye", "1010qpqp")
    ]
    
    # 포스트 인스턴스 생성
    posts = [
        Post("개인프로젝트", "개인프로젝트 과제인 업다운 게임 코드와 가위바위보 게임 코딩이 끝났습니다.", "lina"),
        Post("팀프로젝트", "팀프로젝트를 시작했습니다. 팀플용 깃허브 리포지토리와 브랜치를 생성했습니다.", "shlee"),
        Post("깃허브", "코드리뷰를 하기 위해 깃허브 브랜치에 각자 만든 코드를 업로드 하였습니다.", "saeye")
    ]
    
    
    # for문을 돌며 회원의 이름과 ID 정보를 출력하는 함수
    def member_info(members):
        print("\nMember Info")
        for member in members:
            print(f"이름: {member.name}, ID: {member.username}")
    
    # for문을 돌며 Post 정보를 출력하는 함수 (Title, Content, Author)
    def post_info(posts):
        print("\nPost Info")
        for post in posts:
            post.display_post()
    
    # for문으로 members 리스트를 돌면서 유저의 이름만 출력
    def member_name():
        for member in members:
            print(member.name)
    
    # 입력한 키워드를 포함한 게시글의 제목 리스트를 출력하는 함수
    def search_post(keyword):
        titles = [] # 입력한 키워드가 포함된 게시글의 제목을 넣어줄 빈 리스트 하나 생성
        for post in posts: # for문으로 반복
            if keyword in post.content: # 입력한 키워드가 포스트의 게시글 안에 있으면
                titles.append(post.title) # 그 게시글의 제목을 앞에서 만들어준 titles 리스트에 추가
        if titles: # titles리스트에 값이 있으면, 즉 키워드를 포함하는 게시글이 있으면
            print(f"해당 키워드가 포함된 게시글 제목 리스트: {titles}") # 출력해주고
        else: # 없으면
            print("해당 키워드로 검색된 게시글이 없습니다.") # 없다고 출력해준다.
    
    
    member_info(members)
    post_info(posts)
    keyword = input("검색할 키워드를 입력해주세요: ")
    search_post(keyword)

     

    코드를 실행시켜 보면 이렇게 된다.

    Member Info
    이름: 김우린, ID: lina
    이름: 이상현, ID: shlee
    이름: 이새예, ID: saeye
    
    Post Info
    Title: 개인프로젝트 / Content: 개인프로젝트 과제인 업다운 게임 코드와 가위바위보 게임 코딩이 끝났습니다. / Author: lina
    Title: 팀프로젝트 / Content: 팀프로젝트를 시작했습니다. 팀플용 깃허브 리포지토리와 브랜치를 생성했습니다. / Author: shlee
    Title: 깃허브 / Content: 코드리뷰를 하기 위해 깃허브 브랜치에 각자 만든 코드를 업로드 하였습니다. / Author: saeye
    
    검색할 키워드를 입력해주세요: 깃허브
    해당 키워드가 포함된 게시글 제목 리스트: ['팀프로젝트', '깃허브']
    
    Process finished with exit code 0

     

     

Designed by Tistory.