본문 바로가기
자바과정/Java

Java 기초 - 4일차

by Parkej 2021. 2. 2.

public class ClassExam01 {
// 초기 생성자가 이미 있음 : 디폴트임.
	private int a; // 필드 초기화 : field
	private int b;
	// 인스턴스
	// 생성자는 필드 초기화
	public ClassExam01(){ // default constructor
		// 명시적으로 쓴거면 디폴트는 없다.
		a = 100;
		System.out.println("생성자함수 1 " + a);
	}
	
	public ClassExam01(int data){ // 
		// 명시적으로 쓴거면 디폴트는 없다.
		a = data;
		System.out.println("생성자함수 2, data : " + data);
	}
	
	public void setA(int data) { // 입력만 할거면 void
		a = data;
	}
	public void setB(int data) { // 입력만 할거면 void
		b = data;
	}
	
	public int getA() {
		return a;
	}
	public int getB() {
		return b;
	}
	// 따로 지정해주는 이유는 수정할 때 따로따로 관리할 수 있기 때문에 효율적임.
	
//	public void setAll(int aa, int bb) {
//		a = aa;
//		b = bb;
//	}
	
	public static void main(String[] args) {
		// return, 타입 함수명, 매개변수
		
		ClassExam01 ce = new ClassExam01(); // 객체 생성
		ClassExam01 ce1 = new ClassExam01(10);
		ClassExam01 ce2 = new ClassExam01(1000); 
		// 메인은 외부라 생각하고 코딩해야한다. 시작과 끝 담당

		ce1.setA(10);
		ce2.setB(1000);
		
		System.out.println(ce1.getA());//ce.a
		System.out.println(ce2.getB());//ce.b
		
		ce.setA(10); // 필드에 300을 넣어라 
		ce.setB(300);
		
		System.out.println(ce.getA());//ce.a 레퍼런스 . 접근
		System.out.println(ce.getB());//ce.b
	}

}
/*
 * 클래스의 구성요소
 * 
 * 1. field를 보호해라(캡슐화)
 *   : 객체 사용시 지속적으로 사용되어지는 메모리(변수), 필요한 곳에서 계속 씀
 *   : 메소드 안 함수 지역변수(호출되면 생기고 끝나면 사라짐)
 *   : 객체를 계속 써야해 field / 이 메소드를 호출했을때만 쓸거야 지역변수
 *   
 *   : data임.
 *   : 주로 private으로 지정
 *   : 직접적 사용보단 메소드를 통해서 사용한다.
 *   : instance field : 객체 생성하고 쓸 수 있는 데이터(객체당 1개씩), 객체당 하나씩 씀
 *     static field : 객체 상관없이 사용.(미리 만들어짐) -공유-
 *     - 메모리를 아낄 수 있음. (5개가 1개를 같이 씀) 
 *     
 *     
 * 2. constructor (생성자)
 *   : 객체 생성시 자동 호출되어지는 메소드
 *   : 생성자를 명시적으로 만들지 않을경우 디폴트 생성자가 제공됨.
 *     그러나, 명시적으로 한개이상 생성자를 만들경우 디폴트는 제공되지 않음.
 *  
 *   : 디폴트기능 : 객체등록(생성자가 불러지지 않으면 등록을 못함)
 *     사용자기능 : 필드초기화목적 
 *     
 *   : 리턴타입이 없다. 
 *   : 함수명이 클래스명과 동일해야함.
 *   
 *   : 생성자함수는 오버로딩이 가능하다. (다형성)
 *   : 주로 접근지정자는 public 지정
 *   
 * 3. method : 외부와 내부를 연결 (유지보수 쉬움)
 *           : 주로 public 지정
 *           
 *     instance method : 
 *     	this를 가지고 있음
 *      객체 생성후 객체를 통해서 사용
 *      instance field 관리용
 *      
 *     static method : 
 *     	this를 가지고 있지 않음
 *      객체 무관하게 사용가능 (모든 객체가 공유하는 목적)
 *      static field 관리용
 *     
 *     setter : 외부에서 필드에 데이터를 입력하는 메소드
 *     getter : 외부에서 필드에 데이터를 가지고 갈 수 있게 해주는 메소드
 *     추가 메소드 : 객체에 필요한 여러가지 기능의 메소드.
 * 
 * 
 * 
 * 접근지정자
 * private : 나만(외부 접근 불가능)
 * default : 같은 패키지내(폴더)에서만 접근 가능 (같은 공간안에서만) 
 * protected : 같은 패키지 가능, 외부 패키지중 상속받은 서브클래스(자식)만 가능
 * public : 아무나...
 * 
 * 
 * 오버로딩
 * 1. 메소드명을 동일하게 여러개를 제공
 * 2. 매개변수의 타입이 달라야한다.
 * 3. 매개변수의 갯수가 달라야한다.
 * ------ 매개변수로 구분
 * 4. 리턴타입이 다르다(이건 아님...)
 * 5. 같은 의미를 가지고 있는것끼리 하나의 이름으로 사용. (혼란초래 방지) !!
 * 
 * 
 * 
 * 
 */

 

-- this --

public class ThisExam01 {
	
	private int a;
	
	// setter
	public void setA(int a) { // (ThisExam this, int aa)
		this.a = a; // 필드 a인지 명확하게 구분지으려고 this를 썼음.
	}
	
	// getter
	public int getA() { // getA(ThisExam this)
		return a;
	}
	
	public ThisExam01 getObject() {
		return this; // 자기자신의 객체를 리턴할때
	}
	public static void main(String[] args) {
		ThisExam01 te = new ThisExam01();
		System.out.println(a);
		te.setA(10); // te.setA(te, 10)
		System.out.println(te.getA());

	}

}

/*
 * this, this()
 * 
 * this
 *  : instance method의 첫번째 매개변수로 항상 존재하고 있음.
 *  : 만들수는 없고 사용만 가능
 *  
 * this
 * 1. 매개변수 이름과 필드 이름이 같을경우
 * 2. 인스턴스 메소드에서 자기자신의 객체를 리턴할때
 * 3. 
 * 
 * this는 객체를 구별해줌. 
   메소드는 호출할때마다 동작함. 
 *  
 */

 

 

this. 에 대하여

 

반응형

댓글