남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다.
클래스의 정의
- 설계도
- 데이터 + 함수
변수 : 하나의 데이터를 저장할 수 있는 공간
배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
구조체 : 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간
클래스 : 데이터와 함수의 결합 (구조체 + 함수)
- 사용자 정의 타입
원하는 타입을 직접 만들 수 있다. (타입이 바로 클래스)
int hour;
int minute;
int second;
int hour1, hour2, hour3;
int minute1, minute2, minute3;
int second1, second2, second3;
int[] hour = new int[3];
int[] minute = new int[3];
int[] second = new int[3]; //배열로 바꾸면 시간은 시간끼리, 분은 분, 초는 초끼리 묶여있음
> 따라서 아래와 같이 시,분,초를 묶어서 Time 이라는 클래스를 정의! 이게 바로 사용자 정의 타입
class Time {
int hour;
int minute;
int second;
}
int hour;
int minute;
int second;
> Time t = new Time();
int hour1, hour2, hour3;
int minute1, minute2, minute3;
int second1, second2, second3;
> Time t1 = new Time();
> Time t2 = new Time();
> Time t3 = new Time();
int[] hour = new int[3];
int[] minute = new int[3];
int[] second = new int[3];
> Time[] t = new Time[3];
> t[0] = new Time();
> t[1] = new Time();
> t[2] = new Time();
선언 위치에 따른 변수 종류
- 클래스 영역 - iv (instance variable) , cv (class variable)
- 메서드 영역 - lv (local variable)
1
2
3
4
5
6
7
8
9
10
|
class Variables {
int iv ; //인스턴스 변수
static int cv // 클래스 변수 (static 변수, 공유변수)
void method(){
int lv = 0; //지역 변수
}
}
|
cs |
변수의 종류 | 선언 위치 | 생성 시기 |
클래스 변수 (class variable) | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 (instance variable) | 인스턴스가 생성되었을 때 | |
지역 변수 (local variable) | 클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) |
변수 선언문이 수행되었을 때 |
class Card{
String kind ; //무늬
int number ; //숫자 무늬와 숫자는 인스턴스 변수
static int width = 100; //폭
static int height = 250; //높이 폭과 높이는 클래스 변수
}
Card c = new Card(); //객체생성 c.kind = "HEART";c.number = 5; //iv(인스턴스변수) 사용 Card.width = 200; Card.height = 300; //cv(클래스변수) 사용 클래스 변수는 클래스이름을 꼭 붙여야함!
예제 (클래스 변수, 인스턴스 변수)
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
|
class Ex6_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Card.width =" + Card.width);
System.out.println("Card.height =" + Card.height);
Card c1 = new Card();
c1.kind = "Heart";
c1.number = 7;
Card c2 = new Card();
c2.kind = "Spade";
c2.number = 4;
System.out.println("c1은" + c1.kind + ", " + c1.number + "이며, 크기는 ("+ c1.width+", "+ c1.height+")");
System.out.println("c2는" + c2.kind + ", " + c2.number + "이며, 크기는 ("+ c1.width+", "+ c1.height+")");
System.out.println("c1의 width와 height를 각각 50, 80으로 변경합니다.");
c1.width= 50; // Card.width =50;
c1.height = 80; // Card.height =80; c1으로 하면 인스턴스 변수로 착각하기쉽기 때문에 클래스 변수로 클래스명을 붙이는게 좋다.
System.out.println("c1은 " + c1.kind + ", " + c1.number +"이며, 크기는 (" + c1.width + ", " + c1.height+ ")" );
System.out.println("c2는 " + c2.kind + ", " + c2.number +"이며, 크기는 (" + c2.width + ", " + c2.height+ ")" );
}
}
class Card {
String kind;
int number;
static int width = 100;
static int height = 250;
}
|
cs |
출력
Card.width = 100
Card.height = 250
c1은Heart, 7이며, 크기는(100, 250)
c2는Spade, 4이며, 크기는(100, 250)
c1의 width와 height를 각각 50, 80으로 변경합니다.
c1은 Heart, 7이며, 크기는 (50, 80)
c2는 Spade, 4이며, 크기는 (50, 80)
'프로그래밍 > JAVA' 카테고리의 다른 글
자바의 정석 기초 ( static 메서드 / instance 메서드 ) (0) | 2020.07.08 |
---|---|
자바의 정석 기초 ( 메서드 / 메서드 호출 / return 문 / 반환값 ) (0) | 2020.07.08 |
자바의 정석 기초 ( 객체의 생성 / 객체의 사용 / 객체 배열 ) (0) | 2020.07.06 |
자바의 정석 기초 ( 객체지향언어 / 클래스 / 객체 / 인스턴스 ) (0) | 2020.07.01 |
자바의 정석 기초 ( 2차원 배열 / Arrays클래스 / equals() / toString() / copyOf() / copyOfRange() / sort() ) (0) | 2020.07.01 |
댓글