본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 클래스 정의 / 클래스 선언 위치에 따른 변수 종류 / 클래스 변수 / 인스턴스 변수 / 지역변수 )

by ✲ 2020. 7. 7.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

클래스의 정의 

- 설계도

- 데이터 + 함수 

변수 : 하나의 데이터를 저장할 수 있는 공간 

배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간

구조체 : 서로 관련된 여러 데이터(종류 관계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) 

 

반응형

댓글