SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Eclips] Java class 5 - package, import, getters & setters 함수, 생성자 함수. 본문

Java

[Eclips] Java class 5 - package, import, getters & setters 함수, 생성자 함수.

D_Aiden 2023. 12. 13. 12:57
728x90
반응형
SMALL

2023.12.13

## 클래스: 객체의 틀(붕어빵기계)이다.

- 맴버변수맴버메소드만 가질 수 있음.(총 2가지)
- 맴버변수는 데이터 저장
   맴버메소드는 기능구현
- 지역변수(=로컬변수, =글로벌변수)이며, 메소드 내에서 선언되는 변수. 
- 객체화(=인스턴스화)를 만들기 위한 틀이며, 연산자는 new를 사용.
   ex) 붕어빵/붕어빵틀
- 무조건 main에 넣는다.

## Package

- 비슷한 목적으로 생성된 클래스 파일들을 모아둔 폴더.

## Package 호출방식

- 반드시 첫줄에 들어가고
- 소문자 코딩이며,
- import보다 위에 있어야 되고
- 하위 패키지는 package oop.패키지명.패키지명.. ; 형태임        //  하위는 .(점)으로 구분.

## Sttter & Getter 함수

- 공용(static) 변수가 아니라면 → private 추가 → 현재 클래스에서만 접근할 수 있음
private 를 선언하는 순간 위의 방식으로는 타 클래스에서 변수 불러오기 불가능 → Setter&getter 함수 사용

(연습)Student class에 객체를 선언
         StudentTest class
에 변수를 선언

형태: set 변수명(파라미터 변수) {
         return 파라미터변수;
         }
         getter 변수명() { 
         return 파라미터변수;
         }
ex) void setName(String ssname) {
      this.name = ssname;               // this는 클래스명(클래스변수)임. 
  (해석) student 클래스(ssname)에 존재하는 name변수를 불러오는 명령을 사용할때 this. 입력

맴버변수에 접근/초기화 하기 위함.

@ 쉽게 setter/getter함수 만드는 방법
(경로) 우측 마우스 > source > generate setter & getter 클릭하면 자동생성 됨.

package oop.basic;

public class Student {
// 객체생성
	private String hakbun, name;	 //private를 입력하면, 특정변수만 접근.
	private int kor, eng, mat;		 //private를 입력하면, 특정변수만 접근.
	private int total;				 //private를 입력하면, 특정변수만 접근.
	private double avg;				 //private를 입력하면, 특정변수만 접근.

//setter&getter함수는 우측마우스 클릭>source > Generate Setter&Getter 클릭 자동생성.
	public String getHakbun() {
		return hakbun;
	}
	public void setHakbun(String hakbun) {
		this.hakbun = hakbun;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	public int getTotal() {
		return total;
	}
	public void setTotal(int total) {
		this.total = total;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	public void sum() {
		total =kor +eng + mat;
	}	
	public void avg() {
		avg=total/3.0;
	}	
		
	public void setStudent(String hakbun, String name, int kor, int eng, int mat) {
		this.hakbun=hakbun;			//this는 현재클래스 파라미터를 직접 지칭
		this.name=name;				//this는 현재클래스 파라미터를 직접 지칭
		this.kor=kor;				//this는 현재클래스 파라미터를 직접 지칭
		this.eng=eng;           	//this는 현재클래스 파라미터를 직접 지칭
		this.mat=mat;				//this는 현재클래스 파라미터를 직접 지칭
	}
	
// 출력하는 메소드(직접 지정)
	public void output() {
		System.out.println(hakbun+"의 총점"+", 평균"+avg);
	}
}
	public void sum() {
		total =kor +eng + mat;
	}	
	public void avg() {
		avg=total/3.0;
	}	
    
// 출력하는 메소드
	public void output() {
		System.out.println(hakbun+"의 총점"+"," 평균 +avg);
	}
}
package oop.basic;

public class StudentTest {

	public static void main(String[] args) { 
// Main 영역에서 변수 사용하기 [StudentTest class] (Getter&Setter는 객체변수)

// 객체별로 데이터입력 방식(비추천 함)	
	Student s1 = new Student();       
	s1.hakbun="98333021";       //Student클래스에서 private를 선언하면 호출 못함
	s1.name = "aiden";			//Student클래스에서 private를 선언하면 호출 못함
	s1.kor = 90; 				//Student클래스에서 private를 선언하면 호출 못함
	s1.eng = 100;				//Student클래스에서 private를 선언하면 호출 못함
	s1.mat = 95; 				//Student클래스에서 private를 선언하면 호출 못함
	
	s1.setHakbun("200411211");   //직접입력할 수 있으나, Data가 많으면 비추천
	s1.setName("aiden");		//직접입력할 수 있으나, Data가 많으면 비추천
	s1.setKor(90);				//직접입력할 수 있으나, Data가 많으면 비추천
	s1.setEng(80);				//직접입력할 수 있으나, Data가 많으면 비추천
	s1.sum();					//직접입력할 수 있으나, Data가 많으면 비추천
	s1.avg();					//직접입력할 수 있으나, Data가 많으면 비추천
	s1.output();				//직접입력할 수 있으나, Data가 많으면 비추천

// 간편하게 호출하는 방식(setter&getter 함수를 호출하는 형태)    
	s1.setStudent("2000222", "Aiden", 90, 80, 70);
	System.out.println("이름: "+s1.getName());
    s1.sum();					
	s1.avg();					
	s1.output();
	
	Student s2 = new Student(); 
	s2.hakbun="30045124";		//Student클래스에서 private를 선언하면 호출 못함
	s2.name = "홍동우";		 //Student클래스에서 private를 선언하면 호출 못함
	s2.kor = 80;				//Student클래스에서 private를 선언하면 호출 못함
	s2.eng = 90;				//Student클래스에서 private를 선언하면 호출 못함
	s2.mat = 70;				//Student클래스에서 private를 선언하면 호출 못함
	s2.sum();					//Student클래스에서 private를 선언하면 호출 못함
	s2.avg();					//Student클래스에서 private를 선언하면 호출 못함
	s2.output();				//Student클래스에서 private를 선언하면 호출 못함

// 간편하게 호출하는 방식(setter&getter 함수를 호출하는 형태)
	Student s3 = new Student();
	s3.setStudent("20231213", "AAiden",80, 90, 100);   //setter 함수로 변수를 한번에 호출
	System.out.println("이름: "+s3.getName());
	s3.sum();
	s3.avg();
	s3.output();
	}
}

(결과)

200411211의 총점, 평균88.33333333333333
이름: Aiden
30045124의 총점, 평균80.0
이름: AAiden
20231213의 총점, 평균90.0

 

## 생성자(constructor) 함수 오버로딩(overloading)

--> 생성자 메소드라고 안하고 함수라고 함.
--> output은 출력, set은 초기화(값을 넣을때), get은 갖고올때(값을 갖고올때)
1) 객체생성이 목적 (new사용)     ==> 생성자함수 오버로딩 가능
  형태: new 사용(클래스명과 동일해야 되고, 첫글자 대문자)

2) 기본생성자 함수는 기본값 존재
     ex.getInstance(Calendar)                                              // new가 숨겨져 있음(기본생성자 함수). 달력호출

3) 객체는 class단위. new 할때 class를 쓴다.

4) 리턴(return)타입이 없다.


(설명)
생성자 함수로 간략하게 호출(객체생성과 함께 값초기화도 간략하게/편리하게 할 수 있음)

 

## 인스턴스 복사

- 생성자의 입력값에 기존에 호출한 생성자에 대한 변수 값을 복사해서 해당 값을 데이터로 가짐
- c2의 데이터 → 복사 → 같은 값을 가진 신규 객체가 생성된것
- c2 객체 ≠ c3 객체

package oop.basic;
	public class Car {
	private String color;
	private String gearType;
	private int door;

	Car(String color, String gearType, int door) {
		this.color = color;
		this.gearType = gearType;
		this.door = door;
}
	Car(Car c) { //생성된 생성자 함수의 입력 값을 받아오는 생성자 함수 -> 데이터타입 = Car
		this.color = c.color;
		this.gearType = c.gearType;
		this.door = c.door;
	}
}
package oop.basic;
	public class CarTest {

	public static void main(String[] args) {
	// TODO Auto-generated method stub

	Car c2 = new Car("red", "stick", 2);
		System.out.println("C2의 정보 : "+c2.getColor()+", "+c2.getGearType()+", "+c2.getDoor());
	Car c3 = new Car(c2); //c2 데이터 값 받아오기 -> 복사 -> 복사된 c2값 c3 변수에 입력
		System.out.println("C3의 정보 : "+c3.getColor()+", "+c3.getGearType()+", "+c3.getDoor());
	}
}

//Console
	C2의 정보 : red, stick, 2
	C3의 정보 : red, stick, 2
    
//c3 color 변수에 신규 데이터 값 입력
	Car c3 = new Car(c2);
	c3.setColor("blue"); //입력
		System.out.println("C3의 정보 : "+c3.getColor()+", "+c3.getGearType()+", "+c3.getDoor());

//Console
	C2의 정보 : red, stick, 2
	C3의 정보 : blue, stick, 2 //C2의 컬러 데이터값 != C3의 컬러 데이터값
728x90
반응형
LIST