day10 [클래스]


			예시)
			클래스 		프린터 설계도
			객체   		프린터
			멤버변수		프린터 정보: 제조사, 프린터명, 전원, 빨강잉크양, 파랑잉크양 등
			메소드		프린터 기능: 칼라프린트, 흑백 프린트, 양면프린트, 단면 프린트, 전원/온/오프 등

		학생 관리프로그램 : 학생들의 성적관리를 위함
		학생 300명의 정보(학년, 반, 번호, 이름, 국어, 영어, 수학 성적)를 관리
		클래스를 안쓰면 : 	int []grade = new int[300];
						int []classNum=new int[300]
						int []num= new int[300];
						String []name = new String[300];

		클래스가 있으면:	Student []std = new Student[300];
		(여러가지를 묶어서 관리할 수 있기때문에 편리)

클래스의 구성
- 멤버변수	: 정보
- 메소드		: 기능
- 생성자		: 정보의 초기값 설정

		좌표 평면의 점을 나타내는 클래스
			- 멤버변수	: x축의 좌표, y축의 좌표
			- 메소드		: x,y좌표 출력 기능, 좌표 이동 기능 

		자동차 클래스
			- 멤버변수 	: 제조사, 차종, 색, 와이퍼/창문/핸들/타이어 갯수, 엔진, 자동/수동, 기어 등
			- 메소드 		: 시동, 전진/후진, 코너돌기, 주차, 와이퍼 동작, 

		게시판(ex: 네이버 뉴스)
			- 멤버변수	: 제목(사진도), 내용, 작성자, 작성시간, 조회수, 추천/비추천

		회원
			- 멤버변수	: 아이디, 비밀번호, 이메일, 휴대폰번호, 성별, 등  

클래스의 기본 문법 
	class 클래스명{
	접근제한자 멤버변수;
	접근제한자 메소드;
	public 생성자;
	}

	접근제한자? (범위넓은 순=> 낮은순 정렬)
		- public	  	: 본인 클래스 + 같은 패키지 + 다른패키지 						=> 전체(공개)
		- protected 	: 본인 클래스 + 같은 패키지 + 자식(파생)클래스				=> 같은 패키지와 자식(상속에서 다시 설명)
		- (default) 	: 본인 클래스 + 같은 패키지 								(내가 아는 사람들, pakcage 안에 있는) => (나를 포함한 지인)
		- private 		: 본인 클래스(=나) 
		(private)=> 본인 클래스에서만 호출이 가능. =본인 클래스의 메소드에서만 사용이 가능. = 다른클래스에서는 사용할 수 없다

		* 클래스가 public이려면 클래스이름과 파일명이 같아야 한다. 다르면, public을 붙일 수 없음.
		* 일반적으로 대부분의 멤버변수(정보)는 private으로 한다.
			=> 멤버변수의 값을 직접 수정할 수 없다. (예: day10의 private D, ClassEx1)
			=> 멤버변수의 값을 수정할 수 있는 "public으로 된" 메소드를 만들어줘야한다.
				- 해당 메소드를 getter와 setter라고 부른다.
				- getter는 private으로 된 멤버변수의 값을 확인하는 메소드
				- setter는 private으로 된 멤버변수의 값을 설정하는 메소드
				->쉽게 getter setter를 만들 수 있음.(페이지 공백에서 우클릭 => source => getter setter)
				- 정보 수정은 어떤 기능을 통해 이루어져야 하기 때문에
		* 일반적으로 대부분의 멤버메소드(기능)는 public으로 한다.
			=> 
		
		예시)
		자동차 클래스
			- 멤버변수 	: 제조사, 차종, 색, 와이퍼/창문/핸들/타이어 갯수, 엔진, 자동/수동, 기어 등
			*public 	: 제조사, ... 
			*private 	: 기어(나말고 다른 사람이 바꾸면 안된대..), ...
			
클래스의 멤버 변수 접근방법 
	객체명.멤버변수명

			예제)
				2차원 좌표 평면의 점을 나타내는 클래스 : Point 
				멤버 변수 	: x좌표, y좌표
				멤버 메소드	: 좌표를 출력하는 기능, 죄표를 이동하는 기능
	

			예제)
				도형 원을 클래스로 만드려고 한다
			 		- 멤버변수 	: 원의 반지름, 중심점(x,y좌표)
			 		- 멤버 메소드 	: 원 정보 출력, 중심점 이동, 반지름 변경
				- 위의 내용을 토대로 circle 클래스를 생성하고 멤버변수를 선언해보세요.

객체 선언 방법
	1) 클래스명 객체; 					// 실제 만들어진건 아니고,만들어질 예정(객체 선언)
	2) 클래스명 객체 = new 클래스명(); 	//실제 만들어짐(객체 선언과 동시에 생성), new 클래스명(); 에 있는 클래스명은 생성자를 말함(클래스에 생성자 없으면 기본생성자가 자동으로 만들어지니깐). 

생성자 : 멤버 변수를 초기화 하는 곳
	- 모든 클래스는 생성자가 꼭 있어야 한다.
	- 클래스에 생성자가 없으면, 기본 생성자가 자동으로 만들어진다.
		=> 클래스에 생성자가 있으면 기본 생성자는 자동으로 만들어지지 않는다.
	- 메소드에서 리턴타입 자체가 없고(void 아님), 메소드명이 클래스명과 동일
	
	기본생성자 생김새
	public 클래스명(){
				멤버 변수 초기화;
	}			

	생성자(기본 생성자가 아닌 유형)
	public 클래스명(매개변수){
				멤버 변수 초기화;
	}			
	
	
		예제)
		 원(Circle)
			-멤버변수 : 중심점, 반지름 
	
			직각사각형(Rect)
			-멤버변수 : 점 (대각선으로) 2개(왼쪽위의 점, 오른쪽 아래점)		 //직각이기 때문에 2개만 있어도 돼
				  너비, 높이