1. field
: 객체 사용시 지속적으로 사용되어지는 메모리(변수) -> 메소드 호출시만 사용하면 지역변수. 객체를 사용 하는 동안 사용하는건 필드
: 주로 private 로 지정, 직접적 사용보단 메소드를 통해 사용한다.
: instance field : 객체 생성하고 사용 가능(객체당 1개씩)
: static field : 객체 상관 없이 사용가능(미리 생성됨), 공유 ex) 공유된 지갑, 날짜 static. 하나만 만들어두면 여러사람이 볼 수 있음
2. constructor(생성자)
: 객체 생성시 자동 호출되는 메소드 ex) new 사용할 때
생성자를 명시적으로 만들지 않을 경우 디폴트 생성자가 제공이 된다. 그러나 명시적으로 한개 이상 생성자를 만들 경 우, 디폴트는 제공되지 않는다.
디폴트 기능 : 객체 등록
사용자 기능 : 필드 초기화 목적
리턴 타입이 없다. 함수명이 클래스 명과 동일해야함.
생성자 함수는 오버로딩이 가능하다 - 다형성.
주로 접근 지정자는 public
3. method : 외부와 내부를 연결.
instance method : 객체당 하나씩 사용
this를 가지고 있다.
객체 생성 후 객체를 통해서 사용
instance field 관리용
static method
this를 가지고 있지 않다.
객체 무관하게 사용 가능.
static field 관리용
setter : 외부에서 필드에 데이터를 입력하는 메소드
getter : 필드에서 데이터를 불러오는 메소드
접근 지정자
1. private : 나만 쓴다
2. default : 같은 패키지(폴더) 내에서만 접근가능
3. protected : 같은 패키지, 외부 패키지 중 상속 받은 서브 클래스
4. public : 아무나
오버로딩
1. 메소드 명을 동일하게 여러개 제공
2. 매개 변수의 타입이 달라야한다.
3. 매개 변수의 갯수가 달라야한다.
2-3 둘중 하나 혹은 둘다
4. 리턴타입이 다르다 -> 오버로드 구분 규칙이아님 X
5. 같은 의미를 가지고 있는 것 끼리 하나의 이름으로 사용. -> 혼란을 초래하면 안됨.
this, this()
: instance method의 첫번째 매개변수로 항상 존재하고 있다.
: 만들수는 없고 사용만 가능함.
this를 꼭 써야 하는 경우
1. 매개변수 이름과 필드 이름이 같을 경우
2. 자기 자신의 객체를 리턴할때
import java.util.Scanner;
public class ClassGrade {
//field
private int []score;
private String []txt = {"kr", "en", "mt", "sci", "so","avg","tot"};
private float avg;
private int len;
//constructor
public ClassGrade(int i) {
score = new int [i+1];
len = score.length-1;
}
//method
private void setScore(int i, int value) {
score[i] = value;
}
private int getScore(int i) {
return score[i];
}
private void setAvg(float n) {
avg = n/3;
}
private float getAvg() {
return avg;
}
private float calc(int i, int val) {
score[i] += val;
return score[i];
}
private void disp() {
for(int j =0; j<len;j++) {
System.out.print(txt[j]+"\t");
}
System.out.print(txt[5]+"\t"+txt[6]+"\n");
for(int j =0; j<score.length;j++) {
System.out.print(score[j]+"\t");
}
System.out.println(getAvg());
}
public static void main(String[] args) {
ClassGrade ge = new ClassGrade();
Scanner sc = new Scanner(System.in);
// n개의 과목을 입력할 때
System.out.println("과목 수를 입력하세요 (최대 5개)");
ClassGrade ge2 = new ClassGrade(sc.nextInt());
for(int j =0; j<ge2.len;j++) {
System.out.print(ge2.txt[j]+" ");
}
System.out.print("의 성적을 입력하세요\n");
for(int i=0; i< ge2.len;i++) {
ge2.setScore(i,sc.nextInt());
ge2.setAvg(ge2.calc(ge2.len, ge2.getScore(i)));
}
ge2.disp();
}
}
'빅데이터교육과정 > JAVA' 카테고리의 다른 글
DAY 5. Class : has~ a 응용 (0) | 2021.02.04 |
---|---|
DAY 5. Class : has~a (0) | 2021.02.04 |
DAY 3. 배열, 함수 응용 과제(성적입력) (0) | 2021.02.01 |
DAY 3. 배열(Array)과 형변환 (0) | 2021.02.01 |
DAY2. JAVA 기초 - 과제 (0) | 2021.01.30 |