파이썬을 위한 객체지향 프로그래밍 기본 개념 설명

비전공자로써 파이썬을 하며 겪었던 힘든 내용들 중 객체의 핵심 내용 위주로..


우선 다음의 예시를 위한 클래스를 정의해보자

class User:
    def say_hello(user):
        print(f"안녕하세요! 저는 {user.name}입니다.")

    def login(user, my_email, my_password):
        if (user.email == my_email and user.password == my_password):
            print("로그인 성공")
        else:
            print("로그인 실패")

유저클래스는 해당 유저의 이름과 로그인 성공 실패 여부를 나타낸다.


 

인스턴스 메소드의 특별한 규칙

객체 지향 프로그래밍에 대해 정말 아무것도 모르시다면, 매우 간단히 정리해놓은 이전글을 참고하고 오시길..

 

객체 지향 프로그래밍

객체 속성, 행동 모든 것이 객체가 된다. 현실에 존재하든 가상이든 속성과 행동이 떠오른다면 객체가 될 수 있다. 객체지향 프로그래밍: 객체들과 객체들간의 소통 객체지향적으로 설계 = 모델�

koreadatascientist.tistory.com

 

User.say_hello(user1) # 클래스에서 메소드 호출
user1.say_hello() # 인스턴스에서 메소드를 호출

인스턴스에서 메소드를 호출하면, .(dot)왼쪽이 첫번째 파라미터로 자동으로 들어간다.

만약 이 상태에서 괄호를 빈 채로 놔두지 않고, 파라미터까지 써준다면, 2가지의 parameter를 넘겨준것이나 다름없다. 

그러므로 1개의 파라미터를 넘겨줘야 되는데, 2개를 넘겨줬다는 오류가 뜬다.

이는 마치 아래의 에러 코드에서 알 수 있듯, 중복된 파라미터로 기능을 한다.

user1.say_hello(user1) # 에러; 파라미터를 2개 전달받음
User.say_hello(user1, user1) # 위와 동일한 기능

 

파이썬의 첫번째 파라미터 권장사항

파이썬에서는 인스턴스 메소드의 첫번째 파라미터에 대해 'self'로 써주기를 권장한다.

그런 이유로 대부분의 파이썬 IDE(VScode, Pycharm 등)에서는 클래스 내의 메소드를 입력할 때 자동완성으로 첫 번째 파라미터로 self를 생성한다.

self는 결국 주인공일 것이고, 이것은 가독성도 좋게 만든다.

self를 적용해서 위의 클래스를 새로 정의하였다.

맨 위에서 정의한 클래스와 현재 클래스에서 달라진 내용이 무엇인지 찾아볼 것.

class User:
    def say_hello(self):
        print(f"안녕하세요! 저는 {self.name}입니다.")

    def login(self, my_email, my_password):
        if (self.email == my_email and self.password == my_password):
            print("로그인 성공")
        else:
            print("로그인 실패")

 

인스턴스 변수와 같은 이름을 갖는 파라미터

파라미터로 넘기는 변수 이름이 name인 경우가 있고,

인스턴스 변수가 user.name 이라면, 중복의 문제가 없을까?

class User:
    def say_hello(self):
        print(f"안녕하세요 {self.name}입니다.")
        
    def check_name(self, name):
        return self.name == name

맨 아래 코드를 잘 보면 self.name == name이다.

self.name은 인스턴스 변수를 나타내는 name을 의미하고,

뒤의 name은 파라미터로 받은 name이다.

과연 이 둘은 충돌의 문제가 있지 않을까?

 

결론적으로, 없다.

1. Python

목표: 코드잇을 통해 최대한 할 수 있는 강의를 방학동안 다 들어놓기

 

과정:

코드잇 수강이력

약 174시간동안 많은 강의를 들었다.

가장 기억에 남는 것은 파이썬프로그래밍(기초) 부분이다.

기초라고 써놨지만 사실 이정도면 데이터사이언스 하는데에 전혀 지장이 없을 정도다. 

내용이 엄청 중급 고급지다고 할 순 없지만, 그럭저럭 충분하다고 본다.

그리고 데이터사이언스 수업이 있는데 지금 보니까 너무너무너무너무 기초틱한 내용들만 있다.

아니나 다를까 올해 머신러닝, 딥러닝 강의들도 출시예정이라고 하니 

책과 다른 온라인 강의를 통해서 더욱 숙련도를 높이자.

 

2. R

목표: 강의를 추가적으로 결제하지 말고 ADsP를 통해서 기본문법 익혀놓기

 

과정: 파이썬 하기도 벅차다. R보다 차라리 자바를 하는게 어떤가? 혹은 그 시간에 리눅스를 배우는게?

R이 확실히 통계적인 기능이나 시각화가 더 좋다. 시각화 특히 이쁘다는 것을 느낌.

그러나 파이썬 라이브러리도 이에 못지않는 기능들이 있다. R에서 나온거긴 하지만,,,,

그래서 R을 할빠에는 파이썬에 더 집중하자.

기초적인 문법을 배우는게 낫지 않을까 생각했지만 그건 크게 의미있다고 보지 않는다고 생각하여 손절.

 

3. ADsP

목표: 3월 중순에 있는 시험에 대비해서 개강하고 조급하게 준비하지 않게 미리 익혀두기

 

과정: 코로나의 덕(?)분에 2월29일 시험이 5일전엔가 4월달로 연기되었다고 공지가 나왔다.

심지어 3월 중순쯤에 다시 시험이 6월 7일로 연기되었다고.

그래서 지금 조금 놓은 상태이다. 5월초부터 다시 준비를 해야지.

나는 익숙치 않은 개념이다보니 새롭고 어려웠는데 기존에 분석하던 분들은 상당히 쉬운 난이도라고....

지금 보니 어려운 개념은 아닌것 같다는게 내뇌계의정설.

근데 웃긴건 ADP 난이도는 극악 난이도라고,,, 현업자들도 합격률3%랬나...?

 

4. SQLD

목표: 3월 중순에 있는 시험에 대비, 19년 2학기 데베 수업의 연장선이라고 생각하고 추가적인 학습하기

 

과정: 파이썬 데이터사이언스 관련된 공부하다가 SQLD를 자꾸 미루게 되었다. 심지어 공부놓은지 6개월 다되가는 듯..

그리고 이거 조금 내 합리화지만, SQLD 자격증이 기업에서 크게 영향력 있지 않다. 

자격증 몇개보다 프로젝트 경험이 더 유의미할 것 같아서 중요한 것에 집중하기로 하였다.

 

5. 사회조사분석사2급

목표: 19년 1,2학기에 있던 SPSS수업의 연장선이라 생각하고 학습

 

과정: SQLD과 동일한 이유로 손절중.

 

6. 영어

목표: 회화위주이되 데이터분석을 위한 기초적인 독해능력 숙지

회화는 유튜브를 활용한 쉐도잉 훈련법,

독해는 차후 생각해야 될 것 같음.

 

과정: 올초에 잠시 영어에 미친적이 있었다. 미친다고 한꺼번에 늘지 않는다는걸 자각하고 지금은 조금 안정된 상태

그 덕인지 영어와 조금 친숙해졌다고 생각됨. 회화보다는 독해가 많이 늘었고, 번역기를 자주 돌리는 일도 줄었다. 

확실히 영어도 운동과 마찬가지로 꾸준한게 중요하고 주변 환경을 최대한 영어로 바꾸는 것이 중요한듯.

 

7. 수학 및 통계 및 인공지능

목표: 선형회귀, 랜덤포레스트를 기초적으로 알 필요성.

미적분 학습 필요성(중요) - 20년 1학기 수강예정

선형대수학은 간단하게만.

중급통계학은?

 

과정: 학교 수업의 미적분, 선형대수학은 확실히 학문을 논하는 느낌. 

차라리 인공지능 수업을 통해서 관련된 수학개념만 익히는것이 훨씬 더 효율적이라고 판단.

선형대수학 과목만 수강하고 미적분 과목은 수강하지 않음.

계량경제학을 통해 데이터 분석하는 과목도 진행중. 

유의미한 프로젝트 결과가 나왔으면 좋겠다.

 

8. IBM DataScience

목표: 이거 과연 할 수 있을지 의문인데

우선 시작하고 무료체험기간동안 학습하고 판단하기

 

과정: 몇 강이라도 들어볼걸 하는 생각이 들지만,

그때 들어봐야 낯선 내용들 천지여서, 조금 더 내가 훈련한 뒤에 익숙한것들이 보일때쯤 듣는게 더 효과적이라고 판단.

 

9. 캐글 및 데이터브릭을 활용

목표: 슬슬 포트폴리올르 구상해야된다. 일단 위의 기초적인 부분을 학습 한 뒤에

이를 관리해주는 정보들을 찾아서 구상

 

과정: 캐글에 있는 데이터 컴피티션을 통해 좋은 코드들을 필사하면서 공부하였음.

굉장히 많은 도움이 되었지만 문제는 나 혼자 구상하지 못한다는 점이다.

2분기까지 데이터탐색 및 시각화 그리고 전처리까지 스스로 어느정도 하는 수준까지 만들고 싶다.

모델링이나 알고리즘은 깊은 수준까지 이해하고 있지는 않은 상태.

다만 어떤 모델이 어떤 개념인지 정도는 알고 있다. 

 

10. 네이버블로그 및 티스토리 활용

목표: 체계적으로 관리할 필요성이 있음.

위의 내용들을 시작하기 전에 이것부터 해야된다

 

과정: 1분기 끝나갈 때 이제야 조금 눈을 뜸

소통을 위해 네이버블로그를 선택해볼까 했지만,

둘을 이원화시켜서 개인적인 블로깅은 네이버에 하고,

공부나 자기계발에 관련된 내용은 티스토리에 하는 것이 더 낫다고 판단.

 

+ Recent posts