Java

[Java] 데이터와 변수

Rosie_dev 2021. 1. 7. 20:58

데이터의 초기화


자동초기화 (instance, static 변수)

 

정수형인 데이터타입(byte,short, int, long)은 자동적으로 0으로 초기화가 되고, 실수형인 데이터타입(float, double)은 자동적으로 0.0으로 초기화 되고 , 문자형 데이터타입(char)은 자동적으로 ' '으로 초기화 된다. String을 포함한 클래스 타입은 자동적으로 null로 초기화가 된다.

지역변수는 반드시 초기화가 필요하다.

 

 

메서드의 리턴타입 표기

 

메서드는 실행되어진 결과물 앞에 어떻게 할 것인지를 표시해야 한다.  별도의 리턴타입이 없는 경우, void를 메서드 명 앞에 작성해줘야 한다. 리턴 타입이 있는 경우에는 돌려주는 형태가 같아야 한다. 예를 들면, String의 리턴타입은  " "

 

 

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
package my.day02;
 
//=========== 지역변수, instance 변수의 차이점에 대해서 알아본다.========
public class Main01 {
//attribute 속성, static이 없으므로 한 객체만 쓰는 변수, 반드시 인스턴스가 필요
    String id;
    String pwd;
    String name;
    String email;
    int age;        //정수만 들어옴
    
    //멤버변수 => instance 변수와 static 변수를 합친 것을 멤버변수라고 한다.
 
  void showInfo1() {
        /*
        지역변수는 {}에만 사용되는 것으로 {}를 벗어나는 순간
        지역변수는 자동적으로 메모리(RAM)에서 삭제가 된다.
        중요한 것은 지역변수는 반드시 초기화(== 값을 부여하는 것)를 해야 한다. 
        */
        int hopeMoney=5000;
        //설계도면일 뿐이므로 인스턴스 불필요
        
        String shopeMoney = "오천만원";
                //{} 내에서 지역변수 명이 겹치면 안됨
        
        System.out.println("=== 회원정보 ===\n"
                + "1.아이디: " +id+"\n"
                + "2.암호: "+pwd+"\n"
                + "3.성명: "+name+"\n"
                + "4.이메일: "+email+"\n"
                + "5.나이: "+age+"\n"              
                + "6.희망급여: "+hopeMoney+"\n"
                + "7.희망연봉: "+shopeMoney);
        
        //문자열과 문자열 사이의 +는 문자열결합을 뜻하는 것이고
        //숫자와 숫자 사이의 +는 더하기(plus)를 뜻하는 것이고
        //문자열과 숫자 사이의 +는 문자열의 겹합을 뜻한다
        
        //"안녕하세요"+" 반갑습니다" ==> "안녕하세요 반갑습니다" *문자열 결합
        //"안녕하세요" + 25 ==> "안녕하세요25"  *숫자로 문자열 결합으로 본다
        //20+30 ==> 50   *여기서는 그냥 더하기
        //"20"+30 ==> "2030" *문자열 결합
        //20+30+"안녕" ==> "50안녕" *연산은 왼쪽에서 오른쪽으로
        
    }
    
    //반드시 리턴타입 명시, 메서드
    String showInfo2() {
        
        int hopeMoney=4000;
        
        return "=== 회원정보 ===\n"
                + "1.아이디: " +id+"\n"
                + "2.암호: "+pwd+"\n"
                + "3.성명: "+name+"\n"
                + "4.이메일: "+email+"\n"
                + "5.나이: "+age+"\n"
                + "6.희망급여: "+hopeMoney;
    }
    
    public static void main(String[] args) {
    
        //인스턴스화 == 객체(ma1)생성 필요
        Main01 ma1 = new Main01();
        
        //자바스크립트는 ",' 동일 취급, 자바는 구분
        ma1.id = "leess";                      //실행시의 인스턴스는 필요 ma1
        ma1.pwd = "qwer1234";
        ma1.age = 25;
        ma1.email = "leess@naver.com";
        ma1.name = "이순신";
                
        ma1.showInfo1();
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~");
        
        String info1 = ma1.showInfo2();
        System.out.println(info1);
 
        System.out.println("##########################");
                
        Main01 ma2 = new Main01();
        ma2.showInfo1();
        
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        String info2 = ma2.showInfo2();
        System.out.println(info2);
 
    }
 
}
 
cs

 

 

다른 패키지의 static 메서드 사용

 

my.util 패키지의 static 메서드를 다른 패키지에서 사용하려면 접근제어자의 형태에 대해 알아야 한다. (public 등)

공통기능은 static 메서드를 사용하는 것이 좋다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package my.util;
 
 
//import java.lang.*;은 항상 생력되어져 있음
import java.util.Date;
import java.text.SimpleDateFormat;
 
public class MyUtil {
 
    //=== 현재시각을 출력해주는 static 메소드 생성하기 ====
    public static void currentTime() {
        Date now = new Date(); //현재시각, 지역변수 now
 
        SimpleDateFormat sdfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String result = sdfmt.format(now);
        System.out.println(">> 현재시각: "+result+"입니다. <<");
        
        // 2021-01-07 11:22:35
    }
    
}
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
package my.day02;
 
import my.util.MyUtil;
 
//=========== static 메서드에 대해서 알아본다.===========
public class Main02 {
 
    public static void main(String[] args) {       //콘솔 실행은 Main메서드에서 실행하기
        
        System.out.println(">> 여기는 Main02 클래스 입니다 <<");
    
        //현재시각 출력
        MyUtil.currentTime();    //공통기능은 static 메서드로 만들어서 사용하기
    }
 
}
 
 
package my.day02;
 
import my.util.MyUtil;
 
//=========== static 메서드에 대해서 알아본다.===========
public class Main03 {
 
    public static void main(String[] args) {
        
        System.out.println(">> 여기는 Main03 클래스 입니다 <<");
        
        //현재시각 출력
        MyUtil.currentTime();
        
    }
 
}
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
package my.day02.dataType;
 
public class MainSungjuk {
 
    public static void main(String[] args) {
        
    /*    
        
        int hakbun1 = 20191234;
        int hakbun2 = 0014543;
        
        String hakbun3 = "20191234";
        String hakbun4 = "0014543";    
        
        System.out.println("hakbun1: "+hakbun1);  //20191234
        System.out.println("hakbun2: "+hakbun2);  //6499    
        System.out.println("hakbun3: "+hakbun3);  //20191234
        System.out.println("hakbun4: "+hakbun4);  //0014543
    */
        
        Sungjuk lssSj = new Sungjuk();
        lssSj.hakbun = "091234";
        lssSj.name = "이순신";
        lssSj.kor = 68;
        lssSj.eng = 95;
        lssSj.math = 100;
        
        Sungjuk eomSj= new Sungjuk();
        eomSj.hakbun = "109876";
        eomSj.name = "엄정화";
        eomSj.kor = 78;
        eomSj.eng = 88;
        eomSj.math = 95;
        
        lssSj.showSungjuk();        //void로 별도 return 타입 적을 필요가 없음
        System.out.println("----------------------------");
        eomSj.showSungjuk();
        
        
        /*
             === 성적결과 === 
            1. 학번: 091234
            2. 성명: 이순신
            3. 국어: 68
            4. 영어: 95
            5. 수학: 100
            6. 총점: 263
            ----------------------------
            === 성적결과 === 
            1. 학번: 109876
            2. 성명: 엄정화
            3. 국어: 78
            4. 영어: 88
            5. 수학: 95
            6. 총점: 261
         */
/*        
        System.out.println("----------------------------");        
        System.out.println("5/2 => "+(5/2));       
                            //몫  정수/정수 ==> 정수
        System.out.println("5%2 => "+(5%2));       
                              //나머지    정수%정수 ==> 나머지
        System.out.println("5/2.0 => "+(5/2.0));
        System.out.println("5.0/2 => "+(5.0/2));
        System.out.println("5.0/2.0 => "+(5.0/2.0));
        //분모, 분자 한 개만 실수형이여도 값은 실수형
*/
        
        
        
    }
 
}
 
cs

 

 

자료형의 종류


1. 정수형

 

      int가 기본형, long은 접미사 l/L을 붙여야한다.

      byte (1byte == 8bit)  : -2^7  ~ 2^7-1  ==> -128 ~ 127 

      short(2byte == 16bit) : -2^15 ~ 2^15-1 ==> -32,768 ~ 32,767

      int  (4byte == 32bit) : -2^31 ~ 2^31-1 ==> -2,147,483,648 ~ 2,147,483,647  

      long (8byte == 64bit) : -2^63 ~ 2^63-1 ==> -9,223,372,036,854,775,808 ~  9,223,372,036,854,775,807

         

2. 실수형

 

      float(4byte)  : 단정밀도     접미사 f/F 소수점이하 7자리까지 표현됨.     135.3246235

      double(8byte) : 배정밀도   소수점이하 15~16자리까지 표현됨. 135.3246234502345642

 

3. 문자형

 

      char : 자바는 유니코드 체계를 사용, 2byte 이며, 범위는 0 ~ 65535 이다.  UNICODE 표 참조 

      char ch6 = '\u2665';  

 

변수의 명명규칙

 

대소문자 구분이 있으며, 첫 글자는 숫자가 될 수 없다.

 특수문자는 '_' 와 '$' 만 사용이 가능하며,  예약어인  package, import, public, class, String, int, float ... 등은 변수명으로 사용불가하다.  변수명을 정할 때, 첫글자는 소문자로 시작하고 단어와 단어가 결합된 경우이라면 두번째 단어는 대문자로 시작하는것이 일반적이다.

 

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
package my.day02.dataType;
 
public class Sungjuk {
    //=== 속성, property, attribute, field ===
    
    String hakbun; // null 학번         String
    String name; // null 학생명      String
    byte kor; // 0 국어(0~100)    숫자(정수)
    byte eng; // 0 영어         숫자(정수)
    byte math; // 0 수학          숫자(정수)
    
    char hakjum; // ' ' 학점 'A' 'B' 'C' 'D' 'F'
    
    //=== 기능, 행위, behavior, method ===
    void showSungjuk() {
        
        short total = (short)(kor+eng+math);
        String star = " ";
        
        //*** 자바에서 그 데이터타입이 byte||short||char 인 변수가 사칙연산(+,-,*,/)을 한다면,
        // 자동적으로 그 변수의 데이터타입은 int로 변하게 되어 있다!
        // kor+eng+math ==> 자동적으로 int 타입으로 변환(casting)됨. 
        // (short)(kor+eng+math) ==> 강제 형변환(casting) 
        //0~300  ***지역변수는 반드시 초기화해야 한다
        
        float average1 = (float)(total/3.0);
        float average2 = total/3.0f;
        double average3 = total/3.0;
        
        long money = 5000000000L;       
        //자바에서 정수는 기본적으로 int 타입을 취하므로 안된다.
        //long 타입으로 나타내고자 하는 경우, 숫자 뒤에 l 또는 L을 쓰면 된다.
        
        if(average1 >= 90) {
            hakjum = 'A';
        }
        else if(average1 >= 80) {
            hakjum = 'B';            
        }
        else if(average1 >= 70) {
            hakjum = 'C';            
        }
        else if(average1 >= 60) {
            hakjum = 'D';            
        }
        else {
            hakjum = 'F';            
        }
        
        if(hakjum == 'A') {
            star = "☆☆☆☆☆";
        }
        else if(hakjum == 'B') {
            star = "☆☆☆☆";            
        }
        else if(hakjum == 'C') {
            star = "☆☆☆";            
        }
        else if(hakjum == 'D') {
            star = "☆☆";            
        }
        else {
            star = "☆";            
        }
        
        System.out.println("=== 성적결과 === \n"
                + "1. 학번: "+hakbun+"\n"
                + "2. 성명: "+name+"\n"
                + "3. 국어: "+kor+"\n"
                + "4. 영어: "+eng+"\n"
                + "5. 수학: "+math+"\n"
                + "6. 총점: "+total+"\n"
                + "7. 평균1: "+average1+"\n"
                + "8. 평균2: "+average2+"\n"
                + "9. 평균3: "+average3+"\n"
                + "10. 장학금: "+money+"\n"
                + "11. 학점: "+ hakjum+"\n"
                + "12. 학점(☆):  "+ star);    //☆☆☆☆☆
        
                // "6. 총점: " +68+95+100
                // "6. 총점: 68" +95+100   이렇게 문자열의 결합이 됨
                // 계산순서에 유의하여 지정해주기
        
    
    // == 문자형 타입 ==
    // 자바는 char 타입을 표현할 때 unicode를 사용한다.
    char ch1 = 50577;  //유니코드 테이블의 숫자
    char ch2 = 65;
    char ch3 = 'a';
    char ch4 = 'a'+1;     //97+1 ==> 98
    char ch5 = (char)(ch4-1);     //***변수는 모가 올 지 모르니까 
    char ch6 = '\u2665';    
    
    System.out.println("\n === 문자형 ===");
    System.out.println("ch1: "+ch1);
    System.out.println("ch2: "+ch2);
    System.out.println("ch3: "+ch3);
    System.out.println("ch4: "+ch4);
    System.out.println("ch5: "+ch5);
    System.out.println("ch6: "+ch6);
    
/*
      === 문자형 ===
    ch1: 양
    ch2: A
    ch3: a
    ch4: b
    ch5: a
    ch6: ♥
 */    
    
    }
}
cs

'Java' 카테고리의 다른 글

[Java] Java의 설치와 기본 개념  (0) 2021.01.09
[Java] 생성자, 형변환(casting), 연산자(operator)  (0) 2021.01.07
Java 별찍기 문제  (0) 2021.01.03
18 [인강] 자바의정석 ch08  (0) 2020.12.29
17 [인강] 자바의정석 ch07  (0) 2020.12.28
댓글