사람의 특성을 미리 설계도를 만들어 놓으면 >> 그것과 똑같은 종류의 것을 수십개, 수백개 만들어낼 수 있다.
같은 설계도에서 나왔더라도 특성은 다 다를 수 있음
e.g. 자동차 색깔
= 안에 값이 있다 혹은 없다 정의된 타입
설계도(blueprint)를 타입이라고 부름
일반화된 친구를 가져다 쓰는게 주로 우리가 하는 일
(구조체에서 변수랑 함수를 가지고 있을 수 있음)
메서드와 함수는 엄연히 다른 용어다
e.g. 지하철 노선도/ 약도 (무슨 사거리에 어느정도 거리를 가면 뭐가 있음)
e.g. 축구공, 농구공, 배구공 >> 공으로 일반화 할 수 있음!
e.g2. 남자, 여자 >> 사람
추상화를 하기 위해서는 먼저 일반화를 해봐야 함
타입과 인스턴스의 관계?
타입과 클래스는 동치가 아님
클래스는 타입의 일종임
어떤 타입을 만든다는 것은 일반화와 추상화의 과정을 거친다고 얘기할 수 있음
e.g.스크린 입력 >> 스크린을 통해 입력을 받을 수 있다.
우리가 사용하는 모든 값에는 <타입>이 있음
e.g. 세탁기에 들어가는 특정 부품은 우리 회사의 기밀 제품임
겉으로 드러나지 않게 외부에 표출 안함
(세탁기가 구동되는 원리/ 어떤 기어가 들어가는지?)
캡슐화란? Encapsulation
중요사항을 감추고 외부에서 개체를 사용할 수 있는 수단을 제공하는 것
은닉화는 캡슐화로 가는 과정 중에 하나일 수 있음
사용자에게 숨길건 숨기되
사용자가 어떤 행위를 통해서
이 친구의 결과물을 얻는 <통로>가 필요하다
그 통로를 제공하는게 캡슐화다.
e.g. 전원 버튼을 누른다 = 컴퓨터가 동작한다
-> 이게 컴퓨터를 캡슐화 한것임
(안에서 어떻게 동작하는지는 신경쓰지 마라.
앞에서 보여줄 것만 보여준다. 이게 캡슐화)
Q. 타입을 어떻게 캡슐화할 수 있을까?
예시) 타입: 현금인출기
돈을 출금한다고 할때 (이 메소드를 실행할때)
인스턴스에게 <얼만큼?>이라고 힌트를 주는게 파라미터
무엇을 프린트 하겠느냐? 물었을때
프린트할 값을 매개변수로 전달해줌
Step1. 일반화, 추상화
Step2. 은닉화, 캡슐화
겉으로 사용자와 맞닿는 부분은 <메서드>로 구현
사용자 = 이 코드를 사용할 다른 프로그래머
다른 프로그래머가 세탁기라는 타입의 인스턴스를 사용할때
세탁기에 일을 시키는 방법은 메서드를 호출해준다.
앞으로 메서드를 어떻게 구성해줄까?가 최대의 관심사, 고민거리가 될 것