# TIL 웹개발 -  두 class로 생성한 instance 연결, 공유하는 법

과제 내용을 보면 두 개의 class를 사용한다. 

1. 계정을 생성하는 Member 클래스

2. 포스트를 생성하는 Post 클래스

각 클래스로 생성한 인스턴스를 리스트로 만들어 보여주는데 우리는 덧붙여 포스트를 삭제하는 기능을 넣었다.
그냥 __del__(소멸자: __init__과 반대)를 사용하면 되는거 되네 싶었는데, 실제 서비스에선 다른 사람이 내글을 마음대로 지운다면 진짜 `개빡칠 것` 아닌가?

그래서 아이디와 비밀번호를 기입해 포스트 삭제에 대한 권한을 부여한다.

members = [m1, m2, m3]
m1 = [name, username, password]

Member 클래스로 만든 member 인스턴스와 인스턴스를 리스트로 만든 memebrs다.

posts [p1, p2, p3]
p1 = [title, content, author]

Post 클래스로 만든 post 인스턴스와 인스턴스를 리스트로 만든 posts다. (단, author = username) 

두 데이터를 연결시키는 방법은 post의 author 속성에 Member 클래스 인스턴스를 넣는 것이다.
그러면 아래 이미지처럼 사용할 수 있다.

![Image](https://upload.cafenono.com/image/slashpagePost/20240705/215321_WuONB0d77yDaJZMmW1?q=75&s=1280x180&t=outside&f=webp)

그럼 p1 = [title, content, m1] 형태로 사용할수 있고 p1의 author를 알고 싶다면 p1.author.username을 사용하면된다. 그리고 만약 p1의 비밀번호를 알려면 p1.author.password를 사용하면 된다.

> elif select == '4': # 게시글 작성
        while True:
            id_input = input("ID를 입력해주세요. ")
            member_matched = None
            for member in members:
                if id_input == member.username:
                    member_matched = member
                    break
            if member_matched:
                while True:
                    ps_input = input("패스워드를 입력해주세요. ")
                    if ps_input == member_matched.password:
                        print("게시글을 작성해주세요.")
                        title = input("\n제목: ")
                        content = input("내용: ")
                        **posts.append(Post(title, content, member_matched))**
                        print("\n게시글 작성을 완료했습니다.")
                        break
                    else:
                        print("패스워드가 일치하지 않습니다.")
                break
            else:
                print("ID가 존재하지 않습니다. ")

위 코드에선 게시글을 작성할 때, 아이디와 비밀번호를 확인한다. 확인이 맞으면(memebr_matched) 제목과 내용을 기입하고 posts 리스트에 post 객체가 추가되는데 여기서 author에 member_matched를 사용한다.

member_matched는 아이디와 비밀번호로 찾은 member 인스턴스이다.

> elif select == '5':  # 게시글 삭제
        del_title = input("삭제할 게시글의 제목을 입력하세요. ")
        post_matched = None
        for post in posts:
            if del_title == post.title:
                post_matched = post
                break
        if post_matched:
            while True:
                id_input = input("ID를 입력해주세요. ")
               ** if id_input == post_matched.author.username:**
                    while True:
                        ps_input = input("패스워드를 입력해주세요. ")
                        **if ps_input == post_matched.author.password:**
                            posts.remove(post_matched)
                            print(f'{post_matched.title}이 삭제되었습니다.')
                            break
                        else:
                            print("패스워드가 일치하지 않습니다.")
                    break
                else:
                    print("아이디가 일치하지 않습니다.")

이렇게 게시글을 삭제할때,  title을 검색해서 삭제할 post를 선택(post_matched라고 정의)하고 username과 password가 일치하면 삭제되는 기능이다. 

- post_matched.author.username = member.username

- post_matched.author.password = member.password

**기억하자. 두 클래스는 인스턴스를 공유할 수 있고 그 방법은 한 인스턴스를 다른 클래스의 속성으로 사용하면 된다.**

For the site tree, see the [root Markdown](https://slashpage.com/kyugntae-ai.md).
