1. 클래스 (객체 설계도)
붕어빵 틀을 만들어서 똑같은 구조의 데이터를 슉슉 찍어볼까요?
규모가 큰 프로그램을 만들 때는 비슷한 데이터와 기능들을 하나로 묶어두면 아주 편리해요. 이것을 객체지향 프로그래밍이라고 부릅니다. 하리(Hari)에서는 이를 어떻게 구현하는지 하나씩 친절하게 알아볼까요?
클래스는 일종의 **붕어빵 틀(설계도)**이에요. 이 틀 하나만 잘 짜두면 수많은 붕어빵(객체)을 쉽게 찍어낼 수 있답니다!
[클래스]를 설계하자: 키워드로 설계도를 만들고, 처음 만들어질 때로 기본 세팅(생성자)을 정해줍니다.
[자동차]를 설계하자:
'색상'을 [문자열]인 "하양"으로 정하자
'속도'를 [숫자]인 0으로 정하자
처음 만들어질 때 ([문자열]인 '초기색상') 다음과 같이 하자:
'나'의 '색상'을 '초기색상'으로 정하자
<달리기>를 만들자 ([숫자]인 '증가량'):
'나'의 '속도'에 '증가량'을 더하자
틀"부릉부릉! 현재 속도는 {'나'의 '속도'}입니다."를 출력하자
'내차'를 [자동차]인 새로운 [자동차]("파랑")으로 정하자
틀"내 차 색상: {'내차'의 '색상'}"을 출력하자
'내차'의 <달리기>(50)을 실행하자
여기서 '나'(this)는 객체 스스로를 가리키는 특별한 단어예요. 내 안의 변수나 함수를 쓸 때는 꼭 '나'의를 붙여주세요! 객체를 새로 만들 때는 새로운 [클래스]() 키워드를 꼭 사용해요.
정적 멤버 (Static Members)
클래스 하나당 하나만 존재해서 모든 객체가 공유하는 정보나 기능이 필요할 때가 있죠?
그럴 때는 '나' 대신에 '우리'의 '속성' 또는 '우리'의 <메서드>를 사용해요!
[자동차]를 설계하자:
'우리'의 '총생산량'을 [숫자]인 0으로 정하자
처음 만들어질 때 () 다음과 같이 하자:
'우리'의 '총생산량'에 1을 더하자
[자동차]를 돌려주는 '우리'의 <공장>을 만들자 ():
새로운 [자동차]()를 돌려주자
'첫차'를 [자동차]인 새로운 [자동차]()로 정하자
'두번째차'를 [자동차]인 [자동차]의 <공장>()으로 정하자
틀"지금까지 만들어진 자동차 수: {'자동차'의 '총생산량'}"을 출력하자
연산자 덮어쓰기 (Operator Overloading)
객체들끼리 덧셈을 하거나 같은지 비교(==)하고 싶을 때는 매직 메서드를 사용해요!
예를 들어 두 좌표의 위치가 같은지 확인하고 싶다면 <기호 같다> 메서드를 만들면 된답니다.
[좌표]를 설계하자:
'x'를 [숫자]인 0으로 정하자
'y'를 [숫자]인 0으로 정하자
처음 만들어질 때 ([숫자]인 '초기x', [숫자]인 '초기y') 다음과 같이 하자:
'나'의 'x'를 '초기x'로 정하자
'나'의 'y'를 '초기y'로 정하자
[논리]를 돌려주는 <기호 같다>를 만들자 ([좌표]인 '대상'):
만약 ('나'의 'x'와 '대상'의 'x'가 다르다) 라면:
거짓을 돌려주자
만약 ('나'의 'y'와 '대상'의 'y'가 다르다) 라면:
거짓을 돌려주자
참을 돌려주자
'점1'을 [좌표]인 새로운 [좌표](10, 20)으로 정하자
'점2'을 [좌표]인 새로운 [좌표](10, 20)으로 정하자
만약 ('점1'과 '점2'가 같다) 라면:
"두 좌표의 위치가 같습니다!"를 출력하자
동적 리플렉션 (Dynamic Reflection)
프로그램이 실행되는 중에 문자열이나 변수를 사용해서 동적으로 메서드를 부르고 싶다면 <'변수명'>() 문법을 사용해요.
[주문]을 설계하자:
<취소하기>를 만들자 ():
"주문이 취소되었습니다."를 출력하자
'주문서'를 [주문]인 새로운 [주문]()으로 정하자
'행동명'을 [문자열]인 "취소하기"로 정하자
(참고: 꺾쇠 안에 변수를 넣으면 런타임에 메서드를 찾아서 실행해요)
'주문서'의 <'행동명'>()을 실행하자