[1. Class]
1. class의 정의 : 객체를 정의하기 위한 설계도 또는 틀
- 틀이 한 번 설정되면 여러개의 객체에 대한 속성과 기능을 쉽게 정의할 수 있음
2. 클래스의 장점
- 코드의 재사용성이 높음
- 코드의 관리가 용이
3. 클래스의 기능
(1) 속성 정의 : 클래스(Ex.학생명단 )별로 생성되는 인스턴스(Ex.학생)의 속성을 쉽게 정의할 수 있다.
Class Student | student1 | student2 | student3 |
String name; String major; int studentNum; char grade; boolean attendence; |
Student s1 = new Student(); s1.name = 상희; s1.major = 경제금융학부; s1.studentNum = 1001; s1.grade = 'A' s1.attendence = true; |
Student s1 = new Student(); s1.name = 준희; s1.major = 로봇공학; s1.studentNum = 1002; s1.attendence = false; |
Student s1 = new Student(); s1.name = 혜인; s1.major = 경영학부; s1.studentNum = 1003; s3.grade = 'C' |
- 위와 같이 클래스에 지정된 속성 종류를 인스턴스별로 할당 가능
- 굳이 모든 속성값을 채워야 하는건 아님
(2) 기능 정의 : 각 인스턴스의 속성에 영향을 줄 수 있는 기능을 정의할 수 있다.
Class Student | student1 | student2 | student3 |
void gradeUp() {++grade;} void gradeDown() {--grade;} |
s1.gradeDown(); | s3.gradeUp(); |
Class Student | student1 | student2 | student3 |
void attend() {attendence = !attendence} |
s1.attendence(); | s1.attendence(); |
class Student {
// 학생 클래스의 속성
String name;
String major;
int studentNum;
char grade;
boolean attendence;
// 학생 클래스의 기능 (메서드)
void gradeUp() {++grade;}
void gradeDown() {--grade;}
voide attend() {attendence = !attendence;}
}
public class _01_Class {
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "상희";
s1.major = "경제금융학부";
s1.studentNum = 1001;
s1.grade = 'A';
s1.attendence = true;
Student s2 = new Student();
s2.name = "준희";
s2.major = "로봇공학";
s2.studentNum = 1002;
s1.attendence = false;
Student s3 = new Student();
s3.name = "혜인";
s3.major = "경영학부";
s3.studentNum = 1003;
s3.grade = 'C';
s1.gradeDown();
s3.gradeUp();
s1.attend();
s2.attend();
}
}
[2. class의 관리]
1. 참조변수와 주소
- class(Student)별로 인스턴스를 선언하면 각 참조변수(s1, s2, s3)는 인스턴스의 값이 저장된 주소를 갖게 된다.
- 하나의 인스턴스 주소를 여러 참조변수가 사용하는 것은 가능하지만 (Ex. s1 = s2; 와 같은 프로그래밍은 가능)
- 하나의 참조변수가 여러 개의 인스턴스를 갖는 것은 불가능하다.
2. 객체 배열
- class별로 여러 개의 객체가 있다면 배열로 관리하는 것이 편리하다.
- s1, s2, s3으로 선언하는 것이 아니라 아래와 같이 생성하면 배열처럼 관리하는 것이 가능하다.
Student[] sArr = new Student[3];
sArr[0] = new Student();
sArr[1] = new Student();
sArr[2] = new Student();
//생성할 인스턴스의 수가 많다면 반복문으로도 가능
/*
for (int i = 0; i < sArr.length; i++)
sArr[i] = new Student();
*/
[3. class 변수]
1. 인스턴스 변수
- 클래스 영역에 선언되는 인스턴스마다 값을 갖는 변수
2. 클래스 변수
- 모든 인스턴스가 갖게 되는 공통된 값
- 선언할 때 static을 앞에 붙여주면 된다
- 인스턴스가 생성되지 않았더라도 사용할 수 있다
3. 지역 변수
- 메서드 내에서만 사용한 변수
- 메서드의 작업이 끝나면 더는 사용할 수 없다
class Variables {
int i; // 인스턴스 변수
static int j; // 클래스 변수 (static 변수, 공유 변수)
void method() {
int k; // 지역 변수
}
}
[4. 재귀호출 Recursive call]
팩토리얼 구현
class Factorial {
public static void main(String[] args) {
int result = factorial(4);
System.out.println(result);
}
static int factorial(int n) {
int result = 0;
if (n == 1)
result = 1;
else
result = n * factorial(n - 1);
return result;
}
}
비객체지향적 코드 | 객체지향적 코드 |
int hour1, hour2, hour3; int minute1, minute2, minute3; float sec1, sec2, sec3; |
Time t1 = new Time[]; Time t2 = new Time[]; Time t3 = new Time[]; |
int[] hour = new int[3]; int[] minute = new int[3]; float sec = new float[3]; |
Time[] t = new Time[3]; t[0] = new Time(); t[1] = new Time(); t[2] = new Time(); |
'Lang > Java' 카테고리의 다른 글
[java] 예외처리 (0) | 2023.06.04 |
---|---|
[java] 추상화와 인터페이스 (0) | 2023.06.04 |
[java] 객체 지향 프로그래밍 (0) | 2023.06.04 |
[Java] 2차원 리스트 List (0) | 2023.04.06 |
[Java] 1차원 리스트 List (0) | 2023.04.06 |