[TIL] 클래스
앞서서 다룬것과 같이 클래스란?
클래스는 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
클래스 선언
클래스 작성 순서
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
|
package ex0731;
//1. 추상화 작업
/*
* 속성(필드)
* 이름, 국어, 영어
* 기능(메소드)
* 총점, 평균
*/
//2. 클래스 만들기
//3. 객체 생성
public class Score {
//속성(필드, 인스턴스 변수)
String name;
int kor, eng;
//인스턴스 메소드
public int tot() {
return kor+eng;
}
public int ave() {
return tot()/2;
}
}
|
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
|
package ex0731;
public class ClassTest {
public static void main(String[] args) {
//레퍼런스 변수 선언
Score ob1;
//객체 생성 (객체명 + 생성자)(메모리 할당)
ob1 = new Score();
//객체 선언 및 메모리 할당 동시에 하는법
Score ob2 = new Score();
ob1.name = "이영헌";
ob1.kor = 80;
ob1.kor = 90;
System.out.println(ob1.name+":"+ob1.tot()+":"+ob1.ave());
ob2.name = "계란";
ob2.kor = 12;
ob2.kor = 20;
System.out.println(ob2.name+":"+ob2.tot()+":"+ob2.ave());
}
}
|
cs |
접근 제어자 Access Modifier
JAVA에서는 데이터가 중요하기 때문에 데이터 접근에 제한을 두기 위해 접근 제어자를 설정한다.
제어자 | 같은 클래스 | 같은패키지 | 자손클래스 | 전체 |
public | O | O | O | O |
protected | O | O | O | |
default 기본 | O | O | ||
private | O |
필드
클래스의 멤버 변수(인스턴스 변수 + 클래스 static 변수)
필드는 선언할 때 초기화 하지 않으면 객체인 경우 null, int형은 0으로 메모리 할당 받을때 자동 초기화
- 인스턴스 변수객체를 생성할때마다 메모리할당을 한다. 객체가 10개라면 10번 생성
- 클래스 변수클래스가 로딩될 때 단 한번 메모리가 할당되며 객체 생성과 무관하게 사용클래스 변수를 호출시 클래스명으로 호출한다. why: 메모리 할당이 객체로 되어있지 않기 때문
- 메모리 해제는 JVM이 대신 처리해준다.
메소드 (기능)
- 인스턴스 메소드인스턴스 변수와 마찬가지로 객체 생성을 해야 호출이 가능하다.
- 클래스 메소드객체 생성과 상관없이 언제나 호출 가능
인스턴스 변수 , 인스턴스 메소드 : 객체가 메모리를 할당받아야 사용 가능
클래스 변수, 클래스 메소드 : 클래스가 로딩되면 바로 사용 가능 / 객체 생성과 상관없이 사용 가능
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
|
package ex0731;
public class ClassTest3 {
public static void main(String[] args) {
// 객체선언과 메모리할당
User3 u1;
//u1.a=100; // 컴오류 : 메모리 할당이 안되서 오류
//클래스변수는 클래스명으로 접근
System.out.println(User3.c);
//클래스 메소드는 클래스명으로 접근
User3.sub2();
u1=new User3();
User3 u2 =new User3();
u1.a=100; // 인스턴스 변수, 인스턴스 메소드는 객체로 접근
u1.sub1();
u2.sub1();
//클래스 변수나 클래스메소드는 개체로 접근가능하지만
//객체생성과 상관 없으므로 클래스명으로 접근한다.
//객체명으로 소환이 되긴하지만 static 클래스 변수는 클래스명으로 호출해야함
System.out.println(u1.c);
}
}
class User3 {
int a; // 인스턴스 변수. 객체가 생성되면서 0으로 초기화
// 인스턴스 변수 : 객체가 생성되어야만 사용할 수 있다.
// 인스턴스 변수는 객체를 통해서만 접근할 수 있다.
int b=10; // 인스턴스 변수 : 객체가 생성되면서 10으로 초기화
static int c=300; // 클래스 변수
//객체생성과 상관없이 클래스가 로딩되면 바로 사용가능
//클래스명을 이용하여 접근
public void sub1() {
int n =10; //메소드 안에서 선언된 변수
//초기화(값이 존재)해야 사용가능
System.out.println("지역변수"+n);
//인스턴스메소드는 인스턴스 변수, 클래스변수 접근가능
System.out.println(a+":"+b+":"+c);
}
//클래스 메소드
//객체 생성과 상관없이 언제나 호출 가능
public static void sub2() {
//System.out.println(a+":"+b);// 컴오류
}
}
|
cs |
객체생성은 어떻게 하는건가?
new와 생성자를 사용해야만 객체를 생성할 수 있다.
클래스명 = new 생성자([인수]); |
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
|
package ex0731;
public class ClassTest2 {
public static void main(String[] args) {
// 레퍼런스 변수 선언
Bank bb;
// bb,name="홍길동";=> 컴파일오류
// why : 인스턴스 변수 인스턴스 메소드는 객체가 생성된 경우만 호출가능
Bank bb2 = null; // 객체를 null을 초기화
// null은 객체가 생성되지 않은 아무것도 없는 상태
// bb2.name="홍길동"; =>런타임 오류
// 객체가 생성되지 않은 상태에서 인스턴스 변수나 인스턴스 메소드 접근 불가
// NullPointerException 오류
//객체 생성 : new 생성자([인수]);
bb= new Bank();
bb2= new Bank();
//컴파일 오류 : private 접근제어자 => 해당 클래스 외에는 사용 불가
//bb.money=100;
bb.name="영헌";
System.out.println(bb.name+":"+bb.getMoney());
System.out.println(bb2.name+":"+bb2.getMoney());
}
// 클래스가 여기 들어가면 안됨
}
//접근제어자
//public
//protected
//기본(아무것도 안쓴것) : 현재 클래스가 존재하는 패키지내 사용가능
//private
class Bank {
// 인스턴스 변수 객체를 생성해야 호출할 수 있는 변수
// private 클래스내에서만 접근 가능
// 클래스 밖에서는 접근 불가
private int money = 1000;
String name;
// 인스턴스 메소드:객체를 생성해야 호출할 수 있는 메소드
public int getMoney() {
return money;
}
// 인스턴스 메소드
public int draw(int m) {
if (m > money) {
return -1;
}
money -= m;
return m;
}
public void saving(int m) {
money += m;
}
}
|
cs |
'Language > JAVA' 카테고리의 다른 글
[TIL]메소드 (0) | 2020.07.31 |
---|---|
[TIL] 참조 변수 (0) | 2020.07.31 |
[TIL] 객체지향 프로그래밍 (0) | 2020.07.31 |
[TIL] 배열의 복사 (0) | 2020.07.31 |
[TIL] 배열 예제 (0) | 2020.07.30 |
댓글