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는 객체를 구별해줌.
메소드는 호출할때마다 동작함.
*
*/
반응형
'자바과정 > Java' 카테고리의 다른 글
Java 실습(한사람 성적처리:메소드, 생성자) - 4일차 (0) | 2021.02.02 |
---|---|
Java 실습(사칙연산계산기:메소드, 생성자) - 4일차 (0) | 2021.02.02 |
Java 실습(성적처리프로그램:함수2) - 3일차 (0) | 2021.02.02 |
Java 실습(성적처리프로그램:함수1) - 3일차 (0) | 2021.02.02 |
Java 실습(성적처리프로그램:배열) - 3일차 (0) | 2021.02.01 |
댓글