클래스의 정의 : 객체를 정의
클래스의 용도 : 객체를 생성하는데 사용
객체의 정의 : 실존하는것
객체의 용도 : 객체가 갖고있는 기능과 속성에 따라 다름
Tip
클래스 : 설계도
객체 : 제품
객체 = 속성(변수)+기능(메서드)
ex) TV (객체) = 속성 (크기,길이,높이,색상,볼륨,채널) + 기능 (켜기,끄기,볼륨 높이기/낮추기)
▼TV에 대입해보기
1. 클래스가 왜 필요한가
-객체를 생성하기 위해
객체가 왜 필요한가
-객체를 사용하기 위해
객체를 사용하는 의미
-객체가 가진 속성과 기능 사용
객체 : 모든 인스턴스를 대표하는 일반적 용어
인스턴스 : 특정 클래스로부터 생성된 객체 ex Tv인스턴스
객체는 인스턴스라고 쉽게 생각하기
올바른 예)
하나의 소스파일에 여러클래스 작성
-public class가 있는 경우 소스파일의 이름은 반드시 public class의 이름과 일치해야함
(메인 메서드가 있는 클래스와 일치해야함)
-public class 가 없는 경우 소스파일의 이름은 어느 클래스 이름과 동일해도 ok
-하나의 소스파일에는 하나의 클래스만 작성하는게 바람직
-대소문자는 구분되기 때문에 주의할 것
※class가 2개 이상인 경우 main 메서드가 있는 소스파일 이름으로 해야 이클립스가 자동으로 실행!!
잘못된 예)
1) 참조변수 먼저 선언
Tv t; // Tv 클래스 타입의 참조변수 t 선언 (리모콘)
2) 객체 연결
t = new Tv(); //대입연산자로 객체와 리모콘을 연결해주는 행위,
tv 인스턴스를 생성 후, 생성된 tv 인스턴스의 주소를 t에 저장
ex) Tv t = new Tv();
1) t.chaneel = 7; 변수에 7 저장 (변수 사용법)
2) t. channelDown(); 메서드 호출 (메서드 사용법)
3) System.out.println("현재 채널은 " + t.channel + " 입니다.");
Tv t1 = new Tv();
Tv t2 = new Tv();
t1.channel = 7;
System.out.println("t1의 channel 값은" + t1.channel + "입니다."); // t1의 channel 값은 7입니다.
System.out.println("t1의 channel 값은" + t1.channel + "입니다."); // t1의 channel 값은 7입니다.
※하나의 인스턴스를 여러개의 참조변수가 가르키는 경우 가능
그러나 여러 인스턴스를 하나의 참조변수가 가르키는 것은 불가능 (변수는 하나의 값만 저장하기 때문)
- 클래스 작성 2. 객체 생성 3. 객체 사용
TV tv1, tv2, tv3; > Tv[] tvArr = new Tv[3];
// 길이가 3인 Tv타입의 참조변수 배열
1) Tv타입 참조변수 3개 생성
Tv[] tvArr = new Tv[3]; (초기값은 Tv타입이 참조형이므로 null)
2) 각각의 참조변수에 tv객체 생성
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
(객체 각각의 주소가 참조변수에 저장된다)
→ 위와 같은 과정을 간단히
Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
⭐️객체배열만 생성해놓고 객체는 생성 안하는 경우가 많은데 주의하기! 객체배열 생성 후 각 참조변수에 객체 생성하기!!
클래스의 정의
- ①설계도 ②데이터+함수 ③사용자 정의 타입
클래스 = 데이터+함수
-변수(하나의 데이터)→배열(같은종류만 저장)→구조체(서로 관련된 여러종류의 데이터)→클래스(구조체+함수)
사용자 정의 타입
-원하는 타입을 직접 만들 수 있음
-서로 관련된 데이터를 하나로 묶어서 객체지향적인 코드로 만들 수 있음
▲ 비객체지향 코드
▲ 객체지향 코드
이렇듯 유지보수가 쉽고, 코드가 간편해진다는 장점이 있음
영역
①클래스영역 - 선언문만 가능
②메서드영역 - 메서드선언
변수 종류
①iv(인스턴스변수)
선언위치 : 클래스 영역
생성시기 : ★인스턴스가 생성될 때
객체 == iv묶음
객체생성을 해야 사용가능
②cv(클래스변수) - static+iv
선언위치 : 클래스 영역
생성시기 : 클래스가 메모리에 올라갈 때
객체생성이 필요없다
아무때나 사용가능
③lv(지역변수)
선언위치 : 메서드 영역
생성시기 : 메서드 영역 내 변수 선언문이 수행 됐을 때
메서드 끝나면 자동 제거됨
객체 == iv(인스턴스 변수)들을 묶어놓은 것 이라고 쉽게 생각하기~
클래스변수와 인스턴스변수
인스턴스변수 (개별 속성)
클래스변수 (공통 속성)
Ex. 카드객체
① 객체 생성
Card c = new Card();
② iv객체 사용
c.kind = “HEART”;
c.number = 5;
③ .cv객체 사용
Card.width = 200;
Card.height = 300;
🌟주의할 점! cv(static변수) 사용 할 시 참조변수.변수명(c.height)이 아니라 클래스이름.변수명(Card.height)으로 사용해야함