[내배캠 AI코스] TIL

내일배움캠프 13일차 TIL - 3번 과제

띵제 2024. 2. 29. 20:59

절차지향 ; 함수로 된 프로그램(함수형 프로그램/프로젝트)

                위에서부터 한 줄씩 실행이 됨

객체지향 ; 클래스로 된 프로그램(프로젝트)

 

클래스를 이해하기 위해서는 함수를 알아야 하는데

클래스 안에 함수가 있기 때문이다.

 

함수는 네 가지 유형이 있다.

 

1. 매개변수 있음

2. 매개변수 없음

3. 반환(return) 있음

4. 반환(return) 없음

 

 

def hi():

     print(‘hi’)

 

hi()

 

괄호 안에 들어간 값을 매개변수라 한다. 파라미터라고도 한다.

마지막줄 괄호 안의 값은 argument라고 한다. 혹은 인자라고 한다.

 

반환(return)

 

함수는 여러가지 반복적인 기능을 쓰기 위해서 쓴다고 했다.

근데 함수 자체에 여러가지 로직이 있고 그 결과값을 어떤 특정 변수에

전달을 해야할 때가 있다. 

결과값을 밑의 return에다가 전달을 할 수도 있고

그 값을 다른 곳에서도 쓸 수 있다.

 

클래스는

 

oop 객체 지향

 - 캡슐화

 - 다양성

 

클래스 변수

인스턴스 변수

메소드(함수)

self

 

class 선언은,

 

class SampleA(object):

      pass

 

class SampleB():

      pass

 

class SampleC:

      pass

 

이렇게 세 가지 방법로 선언할 수 있다.

 

Dog라는 클래스를 생성함.

 

클래스 변수는 공통. dog1 dog2 둘다 공통으로 적용됨. 모두 다리 네 개 꼬리 하나.

인스턴스 변수는 다 다름. 다들 이름도 다르고 나이도 다르니까.

대충 이런 개념이다.

일단 우리는 클래스 변수와 인스턴스 변수를 구분할 줄 알아야한다.

 

클래스 안에 있는 함수는 메소드라고 얘기한다.

클래스 밖에 있는 단독적인 함수는 그냥 함수라고 말한다.

클래서 안에서 메소드를 만들때는 무조건 self가 들어가야 한다.

 

이 상태에서 3번 과제를 읽어본다.

클래스와 매소드, 어트리뷰트가 있는데

 

과제 내용:

 

Member 클래스와 Post 클래스를 정의하세요.   클래스를 만들어준다.

Member 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.

—————> 
def __init__(self, name, age):
       self.name = name
       self.age = age
이것처럼 인스턴스 변수를 만들어주면 되겠다.

 

Member 클래스에는 다음과 같은 메소드를 가지고 있어야 합니다.

—————> 
print(회원정보 넣어주면 되겠다.)

 

Post 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.

회원 인스턴스를 세개 이상 만들고 members 라는 빈리스트에 append를 써서 저장해주세요

각각의 회원이 게시글을 세개 이상 작성하는 코드를 만들어주세요.(회원이 세명이명 총 9개 이상의 post 인스턴스가 만들어져야 합니다). 만들어진 게시글 인스턴스들은 posts 빈리스트에 append를 써서 저장해주세요

 

 

class Member:

    def __init__(self, name, username, password):

        self.name = name

        self.username = username

        self.password = password

 

    def display(self):

        print("회원 이름:", self.name)

        print("회원 아이디:", self.username)

 

 

class Post:

    def __init__(self, title, content, author):

        self.title = title

        self.content = content

        self.author = author

 

여기까지, 4번 반까지 진행함.

걍 하라는 대로 했는데.. 그 뒤가 난관이다;;

 

시간상의 문제로 챗GPT 도움을 받음.

그러다가 과제를 제때 제출하지 못함.

 

# 회원 인스턴스 생성

member1 = Member("홍길동", "hong123", "1234")

member2 = Member("김철수", "kim123", "abcd")

member3 = Member("이영희", "lee123", "qwerty")

 

# members 리스트에 회원 인스턴스 추가

members = [member1, member2, member3]

 

# 회원 이름 출력

print("회원 이름:")

for member in members:

    print(member.name)

 

# 게시글 인스턴스 생성

post1 = Post("첫 번째 게시글", "첫 번째 게시글 내용입니다.", member1.username)

post2 = Post("두 번째 게시글", "두 번째 게시글 내용입니다.", member2.username)

post3 = Post("세 번째 게시글", "세 번째 게시글 내용입니다.", member3.username)

post4 = Post("네 번째 게시글", "네 번째 게시글 내용입니다.", member1.username)

post5 = Post("다섯 번째 게시글", "다섯 번째 게시글 내용입니다.", member2.username)

post6 = Post("여섯 번째 게시글", "여섯 번째 게시글 내용입니다.", member3.username)

post7 = Post("일곱 번째 게시글", "일곱 번째 게시글 내용입니다.", member1.username)

post8 = Post("여덟 번째 게시글", "여덟 번째 게시글 내용입니다.", member2.username)

post9 = Post("아홉 번째 게시글", "아홉 번째 게시글 내용입니다.", member3.username)

 

# posts 리스트에 게시글 인스턴스 추가

posts = [post1, post2, post3, post4, post5, post6, post7, post8, post9]

 

# 특정 유저가 작성한 게시글의 제목 출력

print("\n홍길동이 작성한 게시글 제목:")

for post in posts:

    if post.author == "hong123":

        print(post.title)

 

# 특정 단어가 content에 포함된 게시글의 제목 출력

keyword = "내용"

print("\n'{}'가 포함된 게시글 제목:".format(keyword))

for post in posts:

    if keyword in post.content:

        print(post.title)

 

 

근데 과제 내는게 엄청나게 힘들었는데,

내가 깃 레파지토리에 올리겠다고 이것저것하다가 미친듯이 꼬여버렸기 때문이다.

그래서 점심시간 5분전에 튜터님께 가서 도움을 요청했는데

튜터님 점심시간도 45분 정도를 잡아먹었다ㅠ

결국 업로드 하는데 한 시간이 걸린 거였다.

근데 끝나고 튜터님이랑 이렇게 저렇게 해봤던 걸

복기할 시간이 없었다.

특강듣고 점심 못먹어서 점심먹고 또 특강듣고..

휴일에 어쩐지 공부를 계속 해야할 것 같다.