언어/JAVA

[JAVA] Class

hvoon 2022. 9. 7. 17:39

-프로그램으로 처리하고자 하는 대상을 자료화하여 하나의 자료형으로 정의한 사용자 정의 자료형

-쉽게 말해 필요에 의해 기본 자료형(int, double, char 등)외에 새롭게 정의한 자료형

-한 개 이상의 자료, 하나 이상의 자료형을 저장할 수 있는 복합 자료형

-자바의 프로그램 단위는 클래스임

-하나의 프로그램 파일(XXX.java) 안에는 여러 개의 클래스를 넣어서 사용할 수 있음

-여러개의 클래스 중 파일이름과 같은 이름을 쓰는 클래스를 public으로 지정함

-그 클래스에는 보통 public static void main(){}이 존재. 이 클래스는 자료형으로서의 클래스이기 보단 프로그램 실행단위로서의 클래스임

 

-만들어서 사용하거나, import해서 사용할 클래스는 자료저장&가공용 클래스임

// 만드는 법: class라는 키워드를 이용하여 만듦
class 클래스이름{
	// member field, property, member variable, field
	int 변수1; // 한글로 변수를 만들 수 있지만 오류시 원인을 찾기 힘듦
	double 변수2;
	String 변수3;
	int[]배열=new int[5];
	
	// member method
	public void 메서드1() {}
	public static void 메서드2(){}
}
//클래스 first 생성
class First{
	int n1;
	int n2;
	// 속성(멤버필드, 멤버변 수, 필드): 클래스에 속한 정보(변수)들
	// 속성은 변수로 생성하여 클래스의 멤버필드라고도 호칭
}

public class Class01 {
	public static void main(String[] args) {
		// 클래스변수의 선언
		First a1;
		// 새로 만들어진 클래스의 변수는 위와 같이 생성함
		// 생성된 변수는 래퍼런스(참조)변수임
		
		// 배열 때와 마찬가지로, new 명령을 이용하여 HEAP 영역에
		// 적정 공간(클래스가 정의된 크기만큼)을 확보한 후
		// 그 주소를 a1변수에 저장하여 사용함
		// 래퍼런스 변수와 new에 의해 만들어진 공간이 합쳐지면 이를 객체라고 부름
		a1=new First();
		// 위와 같이 공간이 할당되면 이제부터 n1, n2 변수가 a1이라는 이름과 함께 사용이 가능함
		// new First()로 생성된 새로운 공간을 뉴인스턴스라고 부를 예정
		
		First a2=new First();
		// 객체가 두개가 만들어지면 a1에도 n1, n2가 생성되고 
        // a2에도 n1, n2가 생성되므로
		// 그들을 구분하기 위해 
        // a1.n1 / a1.n2 / a2.n1 / a2.n2 로 사용함
		System.out.println(a1.n1);
		System.out.println(a1.n2);
		a2.n1=30;
		a2.n2=40;
		System.out.println(a2.n1);
		System.out.println(a2.n2);
	}
}

 

멤버 메서드(member method)

: class에 소속되어 class 객체에 종속된 method

-멤버 메서드는 특별한 경우를 제외하곤 static을 사용하지 않음

-정적(static): 처음부터 만들어지는 이라는 뜻. 정적멤버를 선언할 때 사용함

class Animal{
	String name;
	int age;
	public void output() {
		System.out.printf("name is %s, age is %d \n", name, age);
	}
	public void input() {
		name="molly";
		age=14;
		// output(); // 클래스 내부에 함께 있는 멤버 메서드들간은 서로 호출이 자유로움
	}
	// 멤버메서드는 클래스형으로 생성된 객체 "전용" 메서드임
	// 메서드의 실행이 객체전용으로만 사용된다는 뜻
	// 멤버메서드의 내용을 객체와 상관없는 명령이 들어갈 수도 있지만
	// 보통은 멤버변수들의 조작, 출력, 입력을 위한 명령들로 주로 구성됨
	public void inputWithParam(String n, int a)	{
		name=n;
		age=a;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	// 현재 프로그램(패키지 내의 같은 파일)에서만 사용한다는 가정하에 public도 생략 가능
}

public class Class02 {

	public static void main(String[] args) {
		Animal a1=new Animal(); // 객체 생성
		a1.name="dog"; // save member variable
		a1.age=20; // save member variable
		a1.output(); // 멤버변수처럼 앞에 소속된 객체이름이 오지 않으면 사용할 수 없음
		// output(); ->error
		
		Animal a2=new Animal();
		a2.input();
		a2.output();
		
		Animal a3=new Animal();
		a3.inputWithParam("bella",10);
		a3.output();
		
		System.out.println("name: "+a3.name+", age: "+a3.age);
		String name=a3.getName();
		int age=a3.getAge();
		System.out.println("name: "+name+", age: "+age);
		
		// 어떤 멤버 메서드를 만들고 사용해야 하는가에 대한 정답은 없음
		// 개발자 판단 및 프로그램의 필요성에 의해 설계하고 제작되는 메서드를
		// 잘 만들고 잘 사용하면 됨
	}
}

 

-멤버메서드의 주된 목적은 멤버변수의 값을 저장하거나 얻어오거나 그 둘의 목적이 비교적 크기 때문에 특정멤버메서드(저장하고 얻어오는 메서드)를 별도의 사유가 없어도 멤버변수에 따라 필요한 만큼 만들고 시작하는 경우 많음

-메서드의 이름 setter와 getter라는 이름을 사용하는 두 개의 메서드임

class GetSetTest {
	private int intVar;
	private double doubleVar;
	private String stringVar;
//멤버 변수가 하나 만들어지면 그변수에 전달값을 저장할 수 있는 메서드와 
// 값을 얻어낼 수 있는 메서드를 생성함	

// getter와 setter의 자동 생성
	// 현위치에서 마우스 오른쪽 버튼 클릭
	// source 메뉴
	// generate getters and setters 클릭
	// selectAll 클릭
	// generate 클릭
	
	public int getIntVar() {
		return intVar;
	}
	public void setIntVar(int intVar) {
		this.intVar = intVar; 
		// 멤버변수와 매개변수의 이름이 같은 경우 멤버변수에 this. 을 붙여서 구분함
	}
	public double getDoubleVar() {
		return doubleVar;
	}
	public void setDoubleVar(double doubleVar) {
		this.doubleVar = doubleVar;
	}
	public String getStringVar() {
		return stringVar;
	}
	public void setStringVar(String stringVar) {
		this.stringVar = stringVar;
	}
}
public class Class03{
	public static void main(String[]args) {
		GetSetTest gs=new GetSetTest();
		gs.setIntVar(123);
		System.out.println("멤버변수 intVar: "+gs.getIntVar());
	}
}