Java

Java, Class의 정의(객체지향, seter/geter, Overload)

greenyellow-s 2024. 7. 12. 13:20
728x90
반응형

클래스

 

Java에서 클래스는 객체지향 프로그래밍의 기본적인 개념 중 하나이다.

 

객체지향언어 - OOP(Object Oriented Programming)

실제 사물의 속성(데이터)과 기능(메소드)를 정의하여 가상의 세계를 구현한다.

실제가 아닌 가상의 모의 실험을 통해 많은 시간과 노력이 절감됐다.

 

객체지향언어는 코드의 재사용성이 높으며 유지보수에 용의하고 캡슐과, 상속, 다형성의 특징을 가지고 있다.

 

클래스
객체를 정의하는 것을 클래스 라고 한다.

 

배열은 같은 자료형끼리만 가능하고 첨자(Index)로 관리가 되는데,

객체는 다른 자료형끼리도 가능하며 이름으로 관리한다.

 

클래스는 자료형 상관없이 모아둘 수 있으며 값을 받아들이고 불러오고 호출되고를 반복할 수 있다.


SungJukMain.java 생성 / SungJuk.class 생성

 

class에서 객체 선언

 

public class SungJuk {
           private String name;

}

 

private로 선언한 객체는 자신 현재 있는 클래스 안에서만 접근할 수 있다.

즉, 외부 클래스에서는 접근할 수 없다.

seter, geter

 

seter데이터를 받아오는 것이고

geter 내보내려고 하는 것이다.

 

main 입장에서는 seter는 데이터를 넣는 것이고,

geter는 데이터를 가져오는 것이다.

 

public void setData(String n, int k, int e, int m) {
             name = n;

}

 

public String getName() {
             return name; // name을 반환한다.
}

 

Overload

 

같은 클래스(같은 부모) 안에서 함수의 이름이 똑같다고 하더라도 받는 데이터의 개수가 다르거나 자료형이 다르면 완전히 다른 함수이다.

 

인수(매개변수) 형이 틀리거나, 인수(매개변수) 개수가 틀린 경우

 

쌍둥이 함수라고 생각하면 쉽게 이해된다.

쌍둥이는 생김새는 똑같지만 두 사람은 "완전히 다른 사람"이다.

class의 함수 역시 마찬가지이다.

 

class Test{

             public void setData(String n, int k, int e, int m)

             public void setData()

}

두개는 다른 함수이다.

 

Main에서 class에 선언한 객체 불러오기

 

가져올 클래스가 SungJuk.class 일 때,

 

SungJuk aa = new SungJuk();

 

데이터 넣기

 

aa.setData("홍길동", 90, 96, 100);

 

class에 있는 앞에서 선언한 함수

public void setData(String n, int k, int e, int m) 에 데이터가 들어간다.

n="홍길동"

k=90

e=96

m=100

 

이렇게 들어간 데이터가 setData 안에 구문대로 수행된다.

     name = n;
     kor = k;
     eng = e;
     math = m;

}

 

name = n = "홍길동"

kor = k = 90

eng = e = 96

math = m = 100

 

this

 

전역 객체를 가르키고, 메서드로서 호출될 때는 해당 메서드를 호출한 객체를 가르킨다.

this는 생략이 가능하고 자기 자신  클래스의 정보(reference - 참조값)를 갖고 있다.

 

public class SungJuk{

       private String n;  //전역

      public void setData(String n, int k, int e, int m){

                   this.n = n;

      }

}

 

this.n은 전역 객체

n은 해당 함수의 String n;

 

계산 함수에 방금 넣은 데이터로 계산하기

 

aa.calc();

 

class에 있는 calc() 함수 실행

public void calc(){

       tot = kor+eng+math; // 더한 값이 tot 객체에 저장된다.
       avg = tot/3;

       ...

}

 

객체에 넣어놨던 데이터 가져오기

 

System.out.println( aa.getName() )

 

 

 


SungJukMain.java

package class_;

public class SungJukMain3 {

	public static void main(String[] args) {
		
		SungJuk[] ar = new SungJuk[3]; // 객체 배열 생성 // 방만 잡은거
		
		ar[0] = new SungJuk(); // class를 생성한거
		ar[1] = new SungJuk();
		ar[2] = new SungJuk();
		
		ar[0].setData("홍길동", 90, 96, 100);
		ar[1].setData("이기자", 95, 56, 70);
		ar[2].setData("코난", 100, 97, 100);
		
		System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
		
		for(int i=0; i<ar.length; i++) {
			ar[i].calc();
			System.out.println(ar[i].getName() + "\t" 
					+ ar[i].getKor() + "\t" 
					+ ar[i].getEng() + "\t" 
					+ ar[i].getMath() + "\t" 
					+ ar[i].getTot() + "\t" 
					+ String.format("%.2f", ar[i].getAvg()) + "\t" 
					+ ar[i].getGrade());	
		}
	}

}

 

Class 파일

package class_;

public class SungJuk {
	private String name;
	private int kor, eng, math, tot;
	private double avg;
	private char grade;
	
	public void setData(String n, int k, int e, int m) {
		name = n;
		kor = k;
		eng = e;
		math = m;
	}
	
	public void calc(){
		tot = kor+eng+math;
		avg = tot/3;
		
		switch((int)(grade/100)) {
		case 9 : grade = 'A';
		case 8 : grade = 'B';
		case 7 : grade = 'C';
		case 6 : grade = 'D';
		default : grade = 'F';
		}
	}
	
	public String getName() {
		return name;
	}
	public int getKor() {
		return kor;
	}
	public int getEng() {
		return eng;
	}
	public int getMath() {
		return math;
	}
	public int getTot() {
		return tot;
	}
	public double getAvg() {
		return avg;
	}
	public char getGrade() {
		return grade;
	}
}

 

 

728x90
반응형