안녕하세요 스터디 늦은 박씨입니다. 감사합니다.
기본적인 틀은 기존 언어에 개념과 규칙을 더한 것이다.
왜함?
재사용성, 유지보수, 중복 코드 제거
캡슐화, 상속화, 추상화, 다형성을 추구해보자.
쓰앵님의 클래스는 설계도, 객체는 이 클래스를 갖고 만든 제품, 참조변수는 제품을 조작하는 리모콘이라는 비유가 아주 찰떡이다 굿
객체는 옆집 숭이도 기억할 수 있도록 바로 위에서 말했다 클래스라는 설계도를 갖고 만든 제품!
이 과정을 있어보이게 인스턴스화라고 하며, 만들어진 객체는 인스턴스라고 한다.
엥? 그럼 객체라고 통일하죠 ㅋㅋ
의미는 같지만, 인스턴스는 어디사는 누구 설계도
로 만들었음? 에 대한 답변으로 더 적절하다고 한다.
예를 들자면
'책상은 인스턴스다' < '책상은 객체다'
'책상은 책상설계도(클래스)의 객체다' < '책상은 책상설계도의 인스턴스다'
속성 : 멤버변수, 특성, 필드, 상태
기능 : 메서드, 함수, 행위
class Tv { // 객체 설계도
String color; // 변수들
boolean power;
int channel;
void power() { //메서드들
power = !power;
}
void channelUp() {
++channel;
}
void channelDown() {
--channel;
}
}
중요하니까 또 말한다
Q. 클래스가 왜 필요한가?
A. 객체를 생성하기 위해
Q. 객체는 왜 필요한가?
A. 객체를 사용하기 위해
Q. 객체를 사용한다??
A. 객체가 지닌 변수와 기능을 사용한다는 것이다.
설계도와 제품을 왜 만드는지도 설명했다!!! 만들어보자!!!!!
Tv t; // Tv클래스 타입의 참조변수 t 선언
t = new Tv(); // Tv인스턴스 생성(new 연산자), 생성된 주소를 참조변수 t에 저장한다.
다만들엇다.
뻥이다 위에 작성한 코드와 합쳐서 다시 만들어보자
class Tv { // 객체 설계도
String color; // 변수들
boolean power;
int channel;
void power() { //메서드들
power = !power;
}
void channelUp() {
++channel;
}
void channelDown() {
--channel;
}
}
class TvTest{
public static void main(String[] args) {
Tv t = new Tv();
t.channel = 7;
t.channelDown(); // 리모콘(참조변수)을 이용해 조작도 해봤다.
}
}
나는 리얼 숭이라 이 과정을 그림으로도 생각해봐야 한다.
헥헥.. 다그렷다
인스턴스는 참조변수를 통해서만 다를 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다!!
객체 두개짜리 예시도 있다.. 두개까지는.. 그리기 귀찮다. 흐름을 따라가셈 그냥 느껴 같은 객체를 가리키고 있는지 아닌지 잘 생각하셈
많은 수의 객체를 다뤄야할 때, 배열로 다루면 편리하겠다 데박!!!!
참조변수 배열이라고 생각하면 될거가틈!!
여기까지는 선언만 했다. 값을 넣어주자!!!
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
이렇게 쓰는게 개이득임
Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
지존 많다면
Tv[] tvArr = new Tv[100];
for (int i = 0; i < tvArr.length; i++) {
tvArr[i] = new Tv();
}
당연히 객체 배열도 같은 타입의 객체만 저장할 수 있다
숭이에서 좀 더 진화하면 다형성을 통해 하나의 배열로 여러 종류의 객체를 다룰 수 있다고 한다~~
클래스
요렇게 나눌 수 있다고 한다
데이터 + 함수?
관계성이 있다면 다양한 변수 타입과 메서드를 한 클래스에서 다룰 수 있다
발전 과정은 다음과 같다.
사용자 정의 타입
원하는 타입을 직접 만들 수 있다..!!!!
요런 식으로
class Time {
int hour;
int minute;
float second;
}
시, 분, 초를 하나로 묶는 사용자정의 타입을 저질러버렸다..
너무 길어서 다음 이시간에...