코딩은 실력보다 시력이지

빅데이터교육과정/JAVA

DAY4. Class.

Listeria 2021. 2. 2. 18:06

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