프로그래밍 언어/JAVA

[JAVA] 자바의 클래스 Class

Rateye 2021. 1. 18. 14:20
728x90
반응형

클래스 class

클래스를 정의한 뒤 반드시 인스턴스를 생성하여야만 해당 클래스에 대한 실체화가 되고, 실체화 된 인스턴스를 통해 변수에 데이터를 저장하거나 메서드를 호출하여 동작을 수행 가능

객체 사용 순서

  1. 클래스타입(참조형) 변수 선언

  2. new 연산자를 사용하여 클래스의 인스턴스 생성

    => 생성된 인스턴스의 주소를 참조 변수에 저장

  3. 주소가 저장된 참조 변수를 통해 인스턴스에 접근하여 사용

 

클래스타입(참조형) 변수 선언 기본 문법

클래스명 변수명;

 

클래스 인스턴스 생성 및 주소 저장 기본 문법

변수명 = new 클래스명();

 

클래스 변수 선언 및 인스턴스 생성을 동시에 수행하는 문법

클래스명 변수명 = new 클래스명();

 

생성된 인스턴스 접근 방법

변수명.멤버변수명 또는 변수명.메서드명()

/*
 * 분석 - 사람(Person)에 대한 객체 모델링
 * 1) 속성 : 이름, 나이 등
 * 2) 동작 : 말하기, 먹기 등
 * 
 * 설계 - Person 클래스 정의
 * 1) 속성(멤버변수) : 이름(name, 문자열), 나이(age, 정수)
 * 2) 동작(메서드) : 말하기, 먹기 등 
 * 
 * < 클래스 정의 기본 문법 >
 * [접근제한자] class 클래스명 {
 * 		// 멤버변수...
 * 		// 메서드()...
 * }
 */
public class Person {
	// Person 클래스 내부에는 멤버변수와 메서드를 정의할 수 있다.
	// 멤버변수(이름, 나이) 선언 => 데이터를 저장하는 공간이 됨
	String name;
	int age;
	// => 인스턴스 생성 시 모든 인스턴스의 초기값이 기본값으로 자동 초기화
	// => 인스턴스마다 새로운 공간이 할당되므로 인스턴스 멤버변수라고 함
	
	String type = "사람"; // 멤버변수 선언 시 초기값 지정(초기화) 가능
	// => 인스턴스 생성 시 모든 인스턴스의 초기값이 "사람"으로 지정됨
	
	// 메서드 정의
	public void print() {
		System.out.println("Person 클래스의 print() 메서드!");
	}
	
}
		// 일반 변수 사용 예시
		String name; // 변수 선언
		name = "홍길동"; // 변수에 데이터 저장
		System.out.println(name); // 변수 데이터 출력
		
		// 클래스타입 변수 선언
		//		Person p;
		
		// 인스턴스 생성 및 주소 저장
		//		p = new Person();
		
		// 위의 두 문장을 한 문장으로 결합
		Person p = new Person();
		
		// 인스턴스가 생성되면 클래스 내의 멤버변수가 
		// 인스턴스 내의 메모리에 생성됨(실제 데이터 저장 가능)
		// 이 때, 인스턴스 내의 멤버변수에 접근하려면
		// 클래스 변수인 참조 변수를 통해 인스턴스에 접근해야함
		p.name = "홍길동"; // 참조변수 p 를 따라가서 멤버변수 name 에 접근
		// => 해당 멤버변수에 문자열 "홍길동"을 저장
		
		// 멤버변수 age 에 접근하여 정수 20을 저장
		p.age = 20;
		
		// Person 인스턴스의 멤버변수에 저장된 값을 출력
		System.out.println("이름 : " + p.name);
		System.out.println("나이 : " + p.age);
		
		p.print(); // Person 인스턴스의 메서드 print() 호출
		
		System.out.println("---------------------");
		
		// 두번째 Person 인스턴스 생성(변수 p2 사용)
		// => 이름 : 이순신, 나이 : 40
		// => 홍길동이 저장된 Person 인스턴스(p)와
		//    클래스 타입은 같지만 서로 다른 인스턴스로 취급됨
		Person p2 = new Person();
		p2.name = "이순신";
		p2.age = 40;
		System.out.println("이름 : " + p2.name);
		System.out.println("나이 : " + p2.age);
		p.print();

클래스의 메서드(Method)

  • 클래스 내에서 객체의 동작을 정의하는 것

  • 기본적으로 메서드 호출되어야만 사용 가능

    => 호출하는 메서드 : Caller, 호출당하는 메서드 : Worker

  • 주로, 인스턴스 변수의 데이터를 저장하거나 꺼내서 사용하는 목적

  • 클래스 내의 메서드 구현부에서 클래스의 인스턴스 변수를 사용하면 인스턴스마다 변수 내의 데이터는 달라지지만 메서드는 동일하므로 코드는 같고, 사용되는 데이터가 달라짐

메서드 정의 기본 문법

[제한자] 리턴타입 메서드명([매개변수선언...]) {
		// 메서드가 호출되면 수행할 코드들...
}
// 동물(Animal) 클래스 정의
// 멤버변수 : 이름(name), 나이(age)
class Animal {
	// 멤버변수 선언
	String name;
	int age;
	
	// "동물 울음 소리!" 를 출력하는 메서드 cry() 정의
	// => 매개변수도 없고, 리턴값도 없는 메서드
	public void cry() {
		System.out.println("동물 울음 소리!");
	}
	
	// 인스턴스변수 name 과 age 의 데이터를 출력하는 메서드 print() 정의
	public void print() {
		// 클래스 내의 메서드에서 멤버변수(인스턴스변수)에 자유롭게 접근 가능
		// => 단순히 변수명만으로 접근
		System.out.println("이름 : " + name + ", 나이 : " + age);
	}
	
}
		// Animal 클래스의 인스턴스(a1) 생성 및 데이터 저장 후 출력
		// ex) 이름 : 멍멍이, 나이 : 2
		// ex2) 이름 : 야옹이, 나이 : 3
		Animal a1 = new Animal();
		// Animal 인스턴스 a1 의 인스턴스 변수 초기화
		a1.name = "멍멍이";
		a1.age = 2;
		// Animal 인스턴스 a1 의 인스턴스 변수값 출력
		//		System.out.println("이름 : " + a1.name + ", 나이 : " + a1.age);
		
		// Animal 인스턴스 a1 의 print() 메서드 호출
		a1.print();
		
		// Animal 인스턴스 a1 의 cry() 메서드 호출
		a1.cry(); // "동물 울음 소리!" 출력 
		
		Animal a2 = new Animal();
		a2.name = "야옹이";
		a2.age = 3;
		//		System.out.println("이름 : " + a2.name + ", 나이 : " + a2.age);
		a2.print();
		a2.cry(); // "동물 울음 소리!" 출력
728x90
반응형