- 클래스 : 내가 만든 변수
- 클래스는 여러 가지 고정된 구성품을 묶어주는 틀. 이 틀로 예시(인스턴스)들을 찍어낼 수 있다. 그 안에 구성품이 어떻게 정의되냐에 따라 각 예시들은 서로 달라진다.
- 보통 헷갈리지 않기 위해 영문 코딩에서 클래스는 첫 글자를 대문자로, 인스턴스는 소문자로 쓴다.
- 자바
- class를 선언한 뒤 사용할 땐 다른 파일에서 한다.
- class 참치선물세트{ \n int 일반; \n int 고추; \n int 야채 \n }
- 참치선물세트라는 틀이 있고 그 안에 들어갈 수 있는 구성품은 일반, 고추, 야채가 있다.
- 참치선물세트 참01호 = new 참치선물세트(); \n 참01호.일반 = 2; \n 참01호.고추 = 1; \n 참01호.야채 = 3;
- 참치선물세트라는 틀을 찍어서 참01호라는 새로운 참치선물세트를 만든다. 참01호에는 일반이 2개, 고추가 1개, 야채가 3개 들어있다.
- 파이썬
- 파이썬에서 맨 첫칸부터 쓰면 메인 메서드. 앞에서 쓰던 거는 끝나고 새로운 게 시작되는 셈.
- class 세면도구세트:
칫솔 = 0
치약 = 0
비누 = 0
세01호 = 세면도구세트()
세01호.칫솔 = 2
세01호.치약 = 3
세01호.비누 = 6
print("***세01호***")
print("칫솔 : " + str(세01호.칫솔))
print("치약 : " + str(세01호.치약))
print("비누 : " + str(세01호.비누)) - 세면도구세트라는 틀을 만든다. 이 안에는 칫솔, 치약, 비누라는 구성품이 있다. 각 구성품은 처음에 0으로 초기화해둔다. 세01호는 세면도구세트의 한 가지다. 세01호의 칫솔은 2개, 치약은 3개, 비누는 6개 들어있다. 세01호의 구성품 내용을 프린트한다.
- 생성자
- 클래스 안의 구성품들을 한번에 정의할 수 있는 틀을 만들어주는 기능. 인스턴스를 만들기 편해진다.
- 자바
- 클래스를 만들어준 뒤, 중괄호 안에 메서드처럼 추가로 작성. 이름은 클래스 이름과 같고, return하는 값이 없다.
- 생성자는 여러 개 만들 수 있다. 괄호 안의 입력값을 다르게 하면 다른 생성자로 인식된다.
- class 세면도구세트{
int 칫솔;
int 치약;
int 비누;
int 샴푸;
int 린스;
세면도구세트(int a, int b, int c, int d, int e){
칫솔 = a;
치약 = b;
비누 = c;
샴푸 = d;
린스 = e;
}
} - 세면도구세트라는 클래스는 칫솔, 치약, 비누, 샴푸, 린스로 구성된다. a, b, c, d, e라는 공간에 값을 받아서 칫솔, 치약, 비누, 샴푸, 린스에 대입하여 세면도구세트를 완성한다.
- 파이썬
- 생성자 이름을 자바처럼 클래스와 같게 하지 않고 __init__ 라고 쓴다.
- class 세면도구세트:
칫솔 = 0
치약 = 0
비누 = 0
def __init__(self, A, B, C):
self.칫솔 = A
self.치약 = B
self.비누 = C
세01호 = 세면도구세트(2, 3, 5) - 세면도구세트라는 클래스에는 칫솔, 치약, 비누가 들어있다. 세면도구세트라는 틀로 예시를 찍어낼 때는 뒤 따르는 세 값에 해당하는 각 구성품이 들어간다.
- this
- 생성자 안에서 적용할 값을 받아올 공간(그릇)에 구성품의 이름을 그대로 쓰고 싶은데 겹쳐서 인식할 수 없을 때 this를 쓰면 클래스 자체에 있는 변숫값을 호출하므로 구분할 수 있다.
- 해석 : "우리의" 무엇무엇. 클래스 안의 메모리 변수.
- 세면도구세트(int 칫솔, int 치약, int 비누, int 샴푸, int 린스){
this.칫솔 = 칫솔;
this.치약 = 치약;
this.비누 = 비누;
this.샴푸 = 샴푸;
this.린스 = 린스;
} - 파이썬에서 self를 쓰는 게 this의 역할을 한다. 그래서 값을 받아올 그릇의 이름에 그대로 구성품 이름을 써도 된다. "내 클래스 자체의" 무엇무엇.
- 클래스 안에 메서드
- 클래스 안에 생성자까지 선언하고 그 아래에 메서드 선언.
- 인스턴스를 만들고 "인스턴스명.메서드()"로 메서드를 호출하면, 해당 인스턴스에 대해 메서드를 사용할 수 있다.
- void 출력하기(String 세트이름){
코딩별.출력("**" + 세트이름 + "**");
코딩별.출력("칫솔 : " + 칫솔);
코딩별.출력("치약 : " + 치약);
코딩별.출력("비누 : " + 비누);
코딩별.출력("샴푸 : " + 샴푸);
코딩별.출력("린스 : " + 린스);
}
저렇게 쓰면 세트이름은 어디서 알아서 가져왔는지 이해가 안 된다.
- 세01호.출력하기("세면도구세트 01호");
- 아! 메소드를 사용할 때 괄호 안에 쓰는 게 세트이름 그릇에 입력되는 거구나.
- 파이썬
- def 출력하기(self, 세트이름):
print(세트이름)
print("칫솔 : " + str(self.칫솔))
print("치약 : " + str(self.치약))
print("비누 : " + str(self.비누)) - 왜 자바에서는 this를 안 쓰는데 파이썬에서는 self를 쓰는지 이해가 안 된다.
- def 출력하기(self, 세트이름):
처음 배우는 사람인데 그때 그때 하나 배울 때마다 자바랑 파이썬을 둘 다 하려고 하니까 헷갈린다. 파이썬은 ;를 안 찍어줘도 되다보니 자바에서도 버릇이 잘 안 든다든가. 그래서 강의 방식이 좀 아쉽다. 처음엔 하나만 똑바로 하려고 해도 어려운데 말이다.
이틀 간 TIL을 블로그에 써보니 확실히 더 공부가 되는 것 같다. 시간은 오래 걸리지만 그냥 한 번 따라 해보고 끝나는 게 아니라 곱씹어 생각해볼 수 있고 글로 풀어쓰면서 더 명확하게 그려진다. 그리고 자연스럽게 복습된다.
'TIL' 카테고리의 다른 글
[TIL-6] 생활코딩 WEB1-19~부록(완강) (0) | 2021.09.14 |
---|---|
[TIL-5] 생활코딩 WEB1-12~18 (0) | 2021.09.13 |
[TIL-4] 생활코딩 WEB1-6~11 (0) | 2021.09.12 |
[TIL-3] 생활코딩 WEB1-1~5 (0) | 2021.09.12 |
[TIL-1] 베어유 첫코딩 1강~12강(CHAPTER 1~3) (0) | 2021.09.09 |