hyeonga_code

Java_35_멤버 필드, 멤버 메소드, 매개 변수, 튜플 본문

Java

Java_35_멤버 필드, 멤버 메소드, 매개 변수, 튜플

hyeonga 2023. 9. 28. 06:59
반응형


- 클래스 멤버
    - 멤버 필드
    - 생성자
    - 멤버 메소드
    - 중첩 클래스

- 멤버 필드
- 변수명을 선언하는 것입니다.
- 멤버 메소드
    - 특정 작업을 수행하기 위한 명령문의 집합입니다.
    - 클래스 내부에서 기능을 위해 선언합니다.
    - 반복되는 복잡한 작업을 손쉽게 사용하기 위함입니다.
    - 반환형 : 반환값의 자료형
    - 종류
      1) void : 반환할 값이 없는 경우 없음을 반환합니다.
      2) 기본 자료형 : boolean, int, double, float, long, byte, char, short
      3) 클래스 : String
- 매개 변수 
   - 메소드가 실행될 때 초기값으로 주는 변수
   - 메소드가 없어도 실행됩니다.
           - 넘겨준 순서에 주의하여 값을 입력해야 합니다.
   - 반환값 : 메소드 실행 후 결과를 반환합니다.
   - 반환형이 void일 경우, return 만 작성해도 무관합니다.(생략 가능)
        - 튜플
            - 데이터베이스 내의 주어진 목록과 관계가 있는 속성값의 모음입니다.
'student.java'
    '''
        // 5. 생성자 : 멤버 변수를 초기화 할 때 사용되는 메서드 입니다.
        public Student() {
        }
        
        public Student(int studentID) {
            this.studentID = studentID;
        }
    '''
=====

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
package oop.basic;
//모든 클래스는 패키지 안에 생성합니다.
 
// 기본형, 메소드의 조합입니다.
public class Student {
    // 모든 함수_메소드는 클래스 안에 작성합니다.
    // 실행하기 위함이 아닌 spec을 작성하기 위함이므로 main()함수를 작성하지 않습니다.
        /* 
            - 추상화
                - 학생 spec 작성하기
                    - 학번
                    - 이름
                    - 학년
                    - 주소
        */
 
    // 1. 멤버 변수를 선언합니다.
    int studentID;
    String studentName;
    private int grade;    // 클래스 외부에서 접근이 불가능합니다.
    String address;
    
    // 5. 생성자 : 멤버 변수를 초기화 할 때 사용되는 메서드 입니다.
    public Student() {
        /*
            - 기본 생성자
               - 생성자를 하나라도 생성하게 되면 기본 생성자를 자동으로 만들어주지 않으므로 직접 작성
        */
    }
    
    public Student(int studentID) {
        /*
            - 생성자의 이름은 클래스의 이름과 동일하게 작성합니다.
             - 초기화만 진행하기 때문에 반환값이 없습니다.
             - 매개 변수의 이름은 자유롭게 작성해도 되지만 멤버 변수의 이름과 동일하게 작성합니다.
         */
        
        this.studentID = studentID;
        /*
            '클래스에서 사용하는 멤버 변수 이름' = '생성자에서 선언한 매개 변수 이름';
                - 멤버 변수와 매개 변수의 이름을 동일하게 작성하는 경우가 많으므로 구분이 어렵습니다.
                > 멤버 변수 앞에 this를 사용하여 구분할 수 있게 작성합니다.
                - this : Heap 공간에 생성된 각각의 객체 자신을 의미합니다.
         */
    }
        /*
            - 생성자를 작성하게 되면 new Student() 메소드로 작성했던 코드들이 오류가 발생합니다.
                - 기본 생성자이기 때문에 작성한 생성자로 다시 작성해야 합니다.
         */
    
    
    // 2. 학생의 이름, 주소 출력 메소드 선언
    public void showStudentInfo() {
        System.out.println("Name : " + studentName);
        System.out.println("Address : " + address);
    }
    
    // 3. 멤버 변수 접근
    public String getStudentName() {
        return studentName;    // Student 클래스에 선언된 멤버 변수의 값을 반환합니다.
    }
 
    public void setStudentName(String studentName) {
        // studentName 을 매개 변수로 받아 함수를 호출하고 반환값은 없습니다.
        this.studentName = studentName;
        /*
            this.studentName : Student 클래스에 선언된 멤버 변수입니다.
                = 
            studentName : 받아온 매개 변수입니다.
         */
        // String studentName1 / studentName = studentName1 로 변경
    }
 
    // 4. 멤버 변수 접근 제한
    public int getGrade() {        // getter 메소드를 통해 값에 접근할 수 있습니다.
        return grade;
    }
 
    public void setGrade(int grade1) {
        if( grade1>0 && grade1<4 ) {
            grade = grade1;
        } else {    // 규정에 맞지 않는 데이터를 입력 했을 경우
            System.out.println("+Grade : between 1 and 3");
        }
    }    
}


'StudentApp.java'
    '''
        // 생성자
        Student student4 = new Student(1);
        System.out.println("student4.studentID : " + student4.studentID);
    '''
=====

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
package oop.basic;
//모든 클래스는 패키지 안에 생성합니다.
 
public class StudentApp {
    // 모든 함수_메소드는 클래스 안에 작성합니다.
    
    // 별칭을 지정합니다.
    static void printInfo(Student student) {        
        /*
            - Scope 내의 코드에 대해 별칭을 지정하여 실행할 수 있습니다.
                '별칭' {
                    별칭으로 지정할 코드
                }
            - 문제
                - 외부에서 Scope 내의 변수에 접근할 수 없습니다.
            >>> 별칭은 내부 변수를 초기화 하는 매개 변수_()를 제공합니다.
                        - 매개 변수 이름은 내부 변수 이름과 동일하게 작성합니다.
                '별칭'('매개 변수 이름') {
                    별칭으로 지정할 코드
                }
            >>> Compile 하기 위해 매개 변수의 데이터 타입을 알려주어야 합니다.
                '별칭'('데이터 타입' '매개 변수 이름') {
                    별칭으로 지정할 코드
                }
            >>> 반환할 데이터 타입을 지정해주어야 합니다.
                void '별칭'('데이터 타입' '매개 변수 이름') {
                    별칭으로 지정할 코드
                }
            >>> static을 통해 클래스 이름을 통해 객체를 생성하지 않고도 접근이 가능합니다.
                static void '별칭'('데이터 타입' '매개 변수 이름') {
                    별칭으로 지정할 코드
                }
         */
        System.out.println("printInfo : " + student.studentName);
    }
    
    public static void main(String[] args) {
        // Java의 모든 코드는 함수 안에 작성합니다.
        /*
            - 'Student.java'에서 작성한 Student 클래스를 사용하기
                1) 클래스 spec을 만족하는 객체를 생성합니다.
                2) 데이터 저장
         */
        
        Student student1 = new Student();    
            /* 
                - 복합형 데이터를 다루는 클래스이기 때문에 new 로 객체를 생성합니다.
                - 대입 연산자의 왼쪽 부터 실행됩니다.
                    - Heap 공간에 Student() 메소드의 객체를 생성합니다.
                        - 클래스의 spec의 조건을 충족시키는지 확인합니다.
                    - Stack 공간에 Heap 공간의 Student() 메소드의 메모리의 주소를 student 변수에 저장
             */
        
        // 데이터 저장
        student1.studentName = "stName1";
        student1.address = "Address 123-123";
            /*
                - 클래스의 spec에 맞는 객체의 정보를 저장합니다.
                    '클래스 이름'.'멤버 변수 이름' = '저장할 값';
             */
        
        // 데이터 출력
        student1.showStudentInfo();
            /*
                Name : stName1
                Address : Address 123-123
                    - showStudentInfo() 함수를 호출하여 실행합니다.
                        - 함수를 작성한 페이지에 가지 않는 한 함수의 자세한 내용을 알 수는 없습니다.
             */
        
        System.out.println(student1.studentName);
        
        Student student2 = new Student();    // 새로운 메소드 객체를 생성합니다.
        student2.studentName = "stName2";
        student2.showStudentInfo();
            /*
                Name : stName2
                Address : null
                    - student2 객체와 student1 객체는 다른 객체이므로 다른 정보가 출력됩니다.
                    - student2 객체에 address 정보를 저장하지 않았으므로 null 값이 출력됩니다.
             */
        System.out.println();
        printInfo(student2);
            /*
                printInfo : stName1
             */
        
        // 멤버 변수 접근
        Student student3 = new Student();
        student3.setStudentName("stName3");                // 값을 저장합니다.
        System.out.println();
        System.out.println("student3.getStudentName() : " + student3.getStudentName());    
            // 값을 불러옵니다.
        System.out.println("student3.studentName : " + student3.studentName);
            // 값을 출력합니다.
            /*
                student3.getStudentName() : stName3
                student3.studentName : stName3
             */
 
        // 멤버 변수 접근 제한
        /*
        student3.grade();
            - 오류 : The method grade() is undefined for the type Student
            - Student 클래스에서 private으로 선언한 grade의 값에 접근할 수 없습니다.
         */
        System.out.println();
        System.out.println("student3.getGrade() : " + student3.getGrade());
            /*
                student3.getGrade() : 0
             */
 
        student3.setGrade(7);
        System.out.println();
        System.out.println("student3.setGrade(7) : " + student3.getGrade());
            /*
                student3.setGrade(7) : 7
             */
        
        // 생성자
        Student student4 = new Student(1);
        System.out.println("student4.studentID : " + student4.studentID);
            /*
                student4.studentID : 1
             */
    }
}


    >>> ID 같은 경우 구별을 위한 정보로 변경이 불가능하게 작성해야 합니다.

'Student.java'
    '''
        private int studentID; // 한 번 지정하면 변경할 수 없도록 private으로 지정합니다.

        public void showStudentInfo() {
            System.out.println("Name : " + studentName);
            System.out.println("Address : " + address);
            System.out.println("ID : " + studentID);
        }
    '''
=====

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
package oop.basic;
//모든 클래스는 패키지 안에 생성합니다.
 
// 기본형, 메소드의 조합입니다.
public class Student {
    // 모든 함수_메소드는 클래스 안에 작성합니다.
    // 실행하기 위함이 아닌 spec을 작성하기 위함이므로 main()함수를 작성하지 않습니다.
        /* 
            - 추상화
                - 학생 spec 작성하기
                    - 학번
                    - 이름
                    - 학년
                    - 주소
        */
 
    // 1. 멤버 변수를 선언합니다.
    private int studentID;    // 한 번 지정하면 변경할 수 없도록 private으로 지정합니다.
    String studentName;
    private int grade;    // 클래스 외부에서 접근이 불가능합니다.
    String address;
    
    // 5. 생성자 : 멤버 변수를 초기화 할 때 사용되는 메서드 입니다.
    public Student() {
        /*
            - 기본 생성자
               - 생성자를 하나라도 생성하게 되면 기본 생성자를 자동으로 만들어주지 않으므로 직접 작성
        */
    }
    
    public Student(int studentID) {
        /*
            - 생성자의 이름은 클래스의 이름과 동일하게 작성합니다.
             - 초기화만 진행하기 때문에 반환값이 없습니다.
             - 매개 변수의 이름은 자유롭게 작성해도 되지만 멤버 변수의 이름과 동일하게 작성
         */
        
        this.studentID = studentID;
        /*
            '클래스에서 사용하는 멤버 변수 이름' = '생성자에서 선언한 매개 변수 이름';
                - 멤버 변수와 매개 변수의 이름을 동일하게 작성하는 경우가 많으므로 구분이 어렵습니다.
                > 멤버 변수 앞에 this를 사용하여 구분할 수 있게 작성합니다.
                - this : Heap 공간에 생성된 각각의 객체 자신을 의미합니다.
         */
    }
        /*
            - 생성자를 작성하게 되면 new Student() 메소드로 작성했던 코드들이 오류가 발생합니다.
                - 기본 생성자이기 때문에 작성한 생성자로 다시 작성해야 합니다.
         */
    
    
    // 2. 학생의 이름, 주소 출력 메소드 선언
    public void showStudentInfo() {
        System.out.println("Name : " + studentName);
        System.out.println("Address : " + address);
        System.out.println("ID : " + studentID);
    }
    
    // 3. 멤버 변수 접근
    public String getStudentName() {
        return studentName;    // Student 클래스에 선언된 멤버 변수의 값을 반환합니다.
    }
 
    public void setStudentName(String studentName) {
        // studentName 을 매개 변수로 받아 함수를 호출하고 반환값은 없습니다.
        this.studentName = studentName;
        /*
            this.studentName : Student 클래스에 선언된 멤버 변수입니다.
                = 
            studentName : 받아온 매개 변수입니다.
         */
        // String studentName1 / studentName = studentName1 로 변경
    }
 
    // 4. 멤버 변수 접근 제한
    public int getGrade() {        // getter 메소드를 통해 값에 접근할 수 있습니다.
        return grade;
    }
 
    public void setGrade(int grade1) {
        if( grade1>0 && grade1<4 ) {
            grade = grade1;
        } else {    // 규정에 맞지 않는 데이터를 입력 했을 경우
            System.out.println("+Grade : between 1 and 3");
        }
    }    
}
 


'StudentApp.java'
    '''
        // 생성자
Student student4 = new Student(1);
student4.setStudentName("stName4");
student4.setGrade(2);
student4.showStudentInfo();
    '''
=====

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 oop.basic;
//모든 클래스는 패키지 안에 생성합니다.
 
public class StudentApp {
    // 모든 함수_메소드는 클래스 안에 작성합니다.
    
    // 별칭을 지정합니다.
    static void printInfo(Student student) {        
        /*
            - Scope 내의 코드에 대해 별칭을 지정하여 실행할 수 있습니다.
                '별칭' {
                    별칭으로 지정할 코드
                }
            - 문제
                - 외부에서 Scope 내의 변수에 접근할 수 없습니다.
            >>> 별칭은 내부 변수를 초기화 하는 매개 변수_()를 제공합니다.
                        - 매개 변수 이름은 내부 변수 이름과 동일하게 작성합니다.
                '별칭'('매개 변수 이름') {
                    별칭으로 지정할 코드
                }
            >>> Compile 하기 위해 매개 변수의 데이터 타입을 알려주어야 합니다.
                '별칭'('데이터 타입' '매개 변수 이름') {
                    별칭으로 지정할 코드
                }
            >>> 반환할 데이터 타입을 지정해주어야 합니다.
                void '별칭'('데이터 타입' '매개 변수 이름') {
                    별칭으로 지정할 코드
                }
            >>> static을 통해 클래스 이름을 통해 객체를 생성하지 않고도 접근이 가능합니다.
                static void '별칭'('데이터 타입' '매개 변수 이름') {
                    별칭으로 지정할 코드
                }
         */
        System.out.println("printInfo : " + student.studentName);
    }
    
    public static void main(String[] args) {
        // Java의 모든 코드는 함수 안에 작성합니다.
        /*
            - 'Student.java'에서 작성한 Student 클래스를 사용하기
                1) 클래스 spec을 만족하는 객체를 생성합니다.
                2) 데이터 저장
         */
        
        Student student1 = new Student();    
            /* 
                - 복합형 데이터를 다루는 클래스이기 때문에 new 로 객체를 생성합니다.
                - 대입 연산자의 왼쪽 부터 실행됩니다.
                    - Heap 공간에 Student() 메소드의 객체를 생성합니다.
                        - 클래스의 spec의 조건을 충족시키는지 확인합니다.
                   - Stack 공간에 Heap 공간의 Student() 메소드의 메모리의 주소를 student 변수에 저장
             */
        
        // 데이터 저장
        student1.studentName = "stName1";
        student1.address = "Address 123-123";
            /*
                - 클래스의 spec에 맞는 객체의 정보를 저장합니다.
                    '클래스 이름'.'멤버 변수 이름' = '저장할 값';
             */
        
        // 데이터 출력
        student1.showStudentInfo();
            /*
                Name : stName1
                Address : Address 123-123
                    - showStudentInfo() 함수를 호출하여 실행합니다.
                        - 함수를 작성한 페이지에 가지 않는 한 
                            함수의 자세한 내용을 알 수 없습니다.
             */
 
        System.out.println(student1.studentName);
        
        Student student2 = new Student();    // 새로운 메소드 객체를 생성합니다.
        student2.studentName = "stName2";
        student2.showStudentInfo();
            /*
                Name : stName2
                Address : null
                    - student2 객체와 student1 객체는 다른 객체이므로 다른 정보가 출력됩니다.
                    - student2 객체에 address 정보를 저장하지 않았으므로 null 값이 출력됩니다.
             */
        System.out.println();
        printInfo(student2);
            /*
                printInfo : stName1
             */
        
        // 멤버 변수 접근
        Student student3 = new Student();
        student3.setStudentName("stName3");                // 값을 저장합니다.
        System.out.println();
        System.out.println("student3.getStudentName() : " + student3.getStudentName());    
            // 값을 불러옵니다.
        System.out.println("student3.studentName : " + student3.studentName);        
            // 값을 출력합니다.
            /*
                student3.getStudentName() : stName3
                student3.studentName : stName3
             */
 
        // 멤버 변수 접근 제한
        /*
        student3.grade();
            - 오류 : The method grade() is undefined for the type Student
            - Student 클래스에서 private으로 선언한 grade의 값에 접근할 수 없습니다.
         */
        System.out.println();
        System.out.println("student3.getGrade() : " + student3.getGrade());
            /*
                student3.getGrade() : 0
             */
 
        student3.setGrade(7);
        System.out.println();
        System.out.println("student3.setGrade(7) : " + student3.getGrade());
            /*
                student3.setGrade(7) : 7
             */
        
        // 생성자
        Student student4 = new Student(1);  // 생성자 호출
        student4.setStudentName("stName4"); 
        student4.setGrade(2);               
        student4.showStudentInfo();
            /*
                Name : stName4
                Address : null
                ID : 1
             */
    }
}
반응형