객체(Object)??
- 객체는 속성과 동작(기능)으로 구성되어 있음.
예) 사람(객체) : 이름, 나이 (속성) / 걷다, 쓰다, 달린다 (기능) 으로 구성
- 객체는 개별적으로 사용될 수도 있지만 대부분 다른 객체와 관계를 맺고 있게 됨.
==> 집합관계, 사용관계, 상속관계가 있음.
집합관계: 객체는 하나의 부품이지만 완성품이기도 함.
자동차의 경우 엔진, 타이어, 핸들 등이 집합관계라고 볼 수 있음.
사용관계: 객체 간의 상호작용을 말함. 다른 객체의 메서드를 호출하여 원하는 결과를 얻어내는 것.
사람은 자동차라는 객체의 달린다, 멈춘다 등의 메서드를 호출함.
상속관계: 부모 객체를 기반으로 자식 객체를 생성하는 관계. 자식 객체는 부모 객체의 속성을 가짐.
객체 지향 프로그래밍??
- 만들고자하는 완성품인 객체를 모델링하고, 집합관계에 있는 부품 객체와 사용관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법.
클래스(Class)?
- 현실에서 객체는 설계도를 바탕으로 만들어짐.
- 자바에서는 클래스가 곧 설계도.
- 자바는 클래스 단위로 프로그래밍을 함.
- 클래스를 구성하는 것을 멤버라고 함.
- 멤버 : 변수와 메서드로 이루어짐.
변수는 명사 같은 개념이고. / 메서드는 동사 같은 개념이다.
- 클래스 이름은 대문자로 시작해야 함.
클래스 형식
[접근지정자] class 클래스이름 {
멤버 변수;
생성자();
멤버메서드();
}
1. 클래스를 대상으로 객체를 생성하는 과정.
형식) 클래스명 참조변수 = new 생성자();
2. 생성자(Constructor)?
1) 클래스를 대상으로 인스턴스를 생성하는 역할
2) 클래스 이름과 동일함.
3) 클래스에 포함되어 있으며, 인스턴스를 생성할 때 자동으로 한 번 호출됨.
4) 클래스는 생성자를 통해서 인스턴스를 생성함.
형식)
[접근지정자] 생성자이름(매개변수) {
생성자 호출 시 실행될 문장;
}
5) 생성자는 메서드 형태를 가지고 있음.
6) 모든 클래스는 반드시 한 개 이상의 생성자를 가지고 있음.
7) 사용자가 생성자를 정의하지 않으면, JVM이 컴파일 시 자동으로 기본 생성자를 만듬.
3. 생성자 사용 목적?
- 멤버 변수들의 초기화를 목적으로 사용됨.
4. 생성자의 특징
1) 생성자 이름 == 클래스 이름
2) 메서드와 다르게 반환형이 없음.
3) 클래스는 반드시 한 개 이상의 생성자를 가지고 있음.
4) 생성자 오버로딩이 가능.
5) 생성자가 보이지 않으면 기본 생성자가 숨겨져 있음.
6) 기본 생성자는 매개변수가 없는 생성자임.
7) 생성자를 새로 만들면, 숨어 있던 기본 생성자는 사라짐.
8) 기본 생성자 외의 다른 생성자를 만들면, 무조건 기본 생성자를 만들어 주는 것이 좋음.
(클래스 상속 시 발생하는 문제를 방지하기 위함)
Student class를 따로 작성해둠.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class Student {
//멤버변수
int hakbun;
String name;
String major;
String addr;
//기본 생성자
public Student() { } //본래 숨어있음.
//인자 생성자
public Student(int h, String n, String m, String a) {
hakbun = h;
name = n;
major = m;
addr = a;
}
//멤버메서드
void display() {
System.out.println("학번 >>> " + hakbun);
System.out.println("이름 >>> " + name);
System.out.println("학과 >>> " + major);
System.out.println("주소 >>> " + addr);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package Class;
public class Ex04_Student {
public static void main(String[] args) {
Student student = new Student();
student.hakbun = 2021001;
student.name = "홍길동";
student.major = "경제학과";
student.addr = "서울시 마포구";
student.display();
System.out.println();
Student student2 = new Student(2021002, "유관순", "회계학과", "충남 천안시");
student2.display();
}
}
|
cs |
만들어 둔 student 클래스로 student라는 인스턴스를 생성.
class 관련 용어 정리.
1. 변수
- 프로그램이 끝날 때가지 언제든지 변할 수 있는 속성. 소문자로 시작.
2. 상수
- 프로그램이 끝날 때까지 절대 변하지 않는 속성. 모든 글자가 대문자.
3. 인스턴스 변수 , 메서드
- 객체 생성과 동시에 만들어지는 변수 / 메서드.
- 객체는 heap 메모리 공간에 만들어짐.
- 객체 생성 후에 사용 가능.
- 호출방법: 참조변수.멤버변수 / 참조변수.멤버메서드
4. static 변수 / 메서드
- static 메모리에서 별도로 만들어짐.
- 공통적으로 사용되는 변수 / 메서드.
- 객체를 생성하지 않아도 어느 클래스나 접근 가능.
- 접근하는 방법이 쉬우나 항상 메모리에 상주하게 되어 메모리 회수가 안되는 단점이 있음.
- 호출방법: 클래스이름.멤버변수 / 클래스이름.멤버메서드
캡슐화(Encapsulation)?
- 객체 지향 프로그래밍 4대 특징 중 하나
- 데이터를 외부에서 함부로 변경하지 못하도록 외부의 접근을 제한하는 것을 뜻함.
- 정보 은닉: 클래스 멤버 접근 제어 기법.
private : 외부에서 직접 접근 차단.
public: 모든 클래스에서 접근 가능.
-setter() / getter() 메서드로 접근 가능.
setter(): 지정자 메서드 / getter(): 획득자 메서드.
메서드?
1. 기능을 정의하는 단위
2. 하나의 기능만을 정의하는 것이 좋음.
3. 자주 반복되는 내용을 정의해 놓고, 필요할 때 호출하여 사용.
형식)
[접근지정자] 반환형 메서드이름(매개변수 혹은 인자) {
메서드 호출 시 실행될 문장;
}
접근제한?
public > protected > default > private
public: 아무렇게나 접근 가능.
protected: 같은 패키지 내에서 접근 가능. 다른 패키지인 경우 상속 관계만 접근 가능.
default: 같은 패지기에서만 접근 가능. 상속 관계라도 안됨.
private: 외부에서 접근 불가.
반환형?
- 메서드를 실행하고 특정 타입의 결과를 반환해 주겠다고 선언하는 것.
- 메서드에서 실행된 결과값을 돌려주는 자료형으로 생략이 불가능.
- 메서드를 호출한 곳으로 결과를 되돌려줄 때 사용하는 자료형.
- 만약 결과를 되돌려줄 필요가 없으면 void 키워드 사용.
- 반환형이 void인 경우를 제오하고 결과를 되돌려 주어야 할 때는 메서드 명령문 맨 끝에 return이란느 키워드를 작성 후 , 앞에서 선언한 반환형과 같은 자료형으로 결과를 되돌려준다.
매개변수
- 외부에서 값을 넘겨 받는 변수, 생략 가능.
- 메서드 호출 시 전달되는 값의 저장을 위한 용도로 사용됨.
- 메서드 호출 시 전달되는 값의 자료형과 매개변수의 자료형은 반드시 일치해야 함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public class Ex03 {
public static void total(int kor, int eng, int math) { //가인수들 (매개변수들)
System.out.println("sum >>> " + (kor + eng + math));
}
public static void total(int su) {
int sum = 0;
for(int i=1; i<=su; i++) {
sum += i;
}
System.out.println("1 ~ " + su +"까지의 합 >>> " + sum);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
total(95, 88, 92); // 실인수들
System.out.println("정수를 입력하세요: ");
total(sc.nextInt());
sc.close();
}
}
|
cs |
메서드 다중정의(오버로딩)
- 동일한 클래스에서 동일한 이름의 메서드가 여러 개 정의되는 자바 문법.
- 일관된 이름을 정의할 수 있어서 개발자에게 코드의 직관성을 제공해 줌.
[규칙]
1. 메서드 이름이 동일해야 함.
2. 반드시 매개변수는 자료형이 다르거나 매개변수의 개수가 달라야 함.
3. 반환형은 무관함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
public class Ex10 {
//2과목의 총점을 구하는 메서드
public static int sum(int k, int e) {
return k + e;
}
//3과목 총점
public static int sum(int k, int e, int m) {
return k + e + m;
}
//4과목 총점
public static int sum(int k, int e, int m, int j) {
return k + e + m + j;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("국어 점수 입력 : ");
int kor = sc.nextInt();
System.out.print("영어 점수 입력 : ");
int eng = sc.nextInt();
System.out.print("수학 점수 입력 : ");
int math = sc.nextInt();
System.out.print("자바 점수 입력 : ");
int java = sc.nextInt();
System.out.println();
System.out.println("2과목 총점 >>> " + sum(kor, eng));
System.out.println("3과목 총점 >>> " + sum(kor, eng, math));
System.out.println("4과목 총점 >>> " + sum(kor, eng, math, java));
sc.close();
}
}
|
cs |
예제. 학생관리 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | package Method; import java.util.Scanner; public class Exam_ans { //학생 정보 저장 메서드 public static void input(String[] n, int[] h, String[] m, String[] p, Scanner sc) { for(int i=0; i<n.length; i++) { System.out.println((i+1) + "번째 학생 정보 입력"); System.out.print("학생 이름 입력: "); n[i] = sc.next(); System.out.print("학생 학번 입력: "); h[i] = sc.nextInt(); System.out.print("학생 학과 입력: "); m[i] = sc.next(); System.out.print("학생 연락처 입력: "); p[i] = sc.next(); } System.out.println(); System.out.println("학생 정보 저장 완료"); } //학생 정보 출력 메서드 public static void output(String[] n, int[] h, String[] m, String[] p) { for(int i=0; i<p.length; i++) { System.out.println("*** " + (i+1) + "번째 학생 정보 출력 ***"); System.out.println("학생 이름 >>> " + n[i]); System.out.println("학생 학번 >>> " + h[i]); System.out.println("학생 학과 >>> " + m[i]); System.out.println("학생 연락처 >>> " + p[i]); System.out.println(); } } // 학생 정보 조회 메서드 public static void search(String[] n, int[] h, String[] m, String[] p, Scanner sc) { System.out.print("조회할 학생의 학번을 입력하세요 : "); int id = sc.nextInt(); for(int i=0; i<h.length; i++) { if(id == h[i]) { System.out.println("학생 이름 >>> " + n[i]); System.out.println("학생 학번 >>> " + h[i]); System.out.println("학생 학과 >>> " + m[i]); System.out.println("학생 연락처 >>> " + p[i]); } } } //학생 정보 수정 메서드 public static void update(int[] h, String[] m, String[] p, Scanner sc) { System.out.print("수정할 학생의학번을 입력하세요. : "); int id = sc.nextInt(); for(int i=0; i<m.length; i++) { if(id == h[i]) { System.out.println("수정할 학생 학과 >>> "); m[i] = sc.next(); System.out.println("수정할 학생 연락처 >>> "); p[i] = sc.next(); } } } //프로그램 종료 메서드 public static void end(Scanner sc) { System.out.print("프로그램을 종료 하시겠습니까? (Y / N)"); String result = sc.next(); if(result.equalsIgnoreCase("Y")) { System.out.println("수고 많이 하셨습니다."); sc.close(); System.exit(0); // 시스템 종료 메서드 } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 1. 키보드로 학생 수를 입력 받기. System.out.print("학생 수를 입력하세요: "); // 2. 학생 정보 배열에 입력받은 학생 수만큼의 배열 생성. String[] names = new String[sc.nextInt()]; int[] ids = new int[names.length]; String[] majs = new String[names.length]; String[] phs = new String[names.length]; //3. 무한반복을 통해 메뉴를 만들고 메서드 호출. while(true) { System.out.println("*** 학생 관리 프로그램 ***"); System.out.println("1. 학생 등록"); System.out.println("2. 전체 출력"); System.out.println("3. 학생 조회"); System.out.println("4. 정보 수정"); System.out.println("5. 프로그램 종료"); System.out.println(); System.out.print("학생 관리 메뉴 중 하나를 선택하세요. : "); int menu = sc.nextInt(); switch(menu) { case 1: //학생 등록 메서드 호출 input(names, ids, majs, phs, sc); break; case 2: //전체 출력 메서드 호출 output(names, ids, majs, phs); break; case 3: //학생 조회 메서드 호출 search(names, ids, majs, phs, sc); break; case 4: //학생 정보 수정 메서드 호출 update(ids, majs, phs, sc); break; case 5: //프로그램 종료 메서드 호출 end(sc); break; } } } } | cs |
'국기훈련과정 > JAVA 복습노트' 카테고리의 다른 글
05. 배열 (0) | 2021.09.01 |
---|---|
04. JAVA의 제어문 (0) | 2021.09.01 |
03. JAVA의 연산자 (0) | 2021.09.01 |
02. JAVA 의 변수 (0) | 2021.09.01 |
01. JAVA의 시작. (0) | 2021.09.01 |