728x90
반응형
클래스 class
클래스를 정의한 뒤 반드시 인스턴스를 생성하여야만 해당 클래스에 대한 실체화가 되고, 실체화 된 인스턴스를 통해 변수에 데이터를 저장하거나 메서드를 호출하여 동작을 수행 가능
객체 사용 순서
-
클래스타입(참조형) 변수 선언
-
new 연산자를 사용하여 클래스의 인스턴스 생성
=> 생성된 인스턴스의 주소를 참조 변수에 저장
-
주소가 저장된 참조 변수를 통해 인스턴스에 접근하여 사용
클래스타입(참조형) 변수 선언 기본 문법
클래스명 변수명;
클래스 인스턴스 생성 및 주소 저장 기본 문법
변수명 = 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
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 자바의 생성자 Constructor (0) | 2021.01.18 |
---|---|
[JAVA] 자바의 접근제한자 Access Modifier (0) | 2021.01.18 |
[JAVA] 자바의 메서드 Method (0) | 2021.01.18 |
[JAVA] 자바의 배열 Array (0) | 2021.01.18 |
[JAVA] 자바의 반복문 for & while (0) | 2021.01.18 |