ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 개념2 (클래스, 필드, 메소드, 제어자)
    학교 수업/자바프로그래밍 2020. 4. 16. 21:19

    자바 프로그램은 한 개 이상의 클래스로 구성


    클래스(Class) 객체 지향 프로그래밍의 추상화(abstraction)라는 개념을 직접 구현한 것


    선언방법


    접근제어자 class 클래스이름 {

        접근제어자 필드1의타입 필드1의이름;

        접근제어자 필드2의타입 필드2의이름;

        ...

        접근제어자 메소드1 원형

        접근제어자 메소드2 원형

        ...

    }


    실제 코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Car {
        private int currentSpeed;
        private int accelerationTime;
     
        public void accelerate(int speed, int second) {
            System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
        }
    }
     
    public class Method01 {
        public static void main(String[] args) {
            Car myCar = new Car();   // 객체 생성, 클래스 이름 + 객체 참조 변수 이름 = new 클래스 이름();
            myCar.accelerate(603); // 메소드 호출
        }
    }
     
    cs


    자바프로그램이 실행되면 맨 먼저 main()메소드를 찾아 그안에 명령문을 차례대로 실행

    따라서 하나의 자바 프로그램에는 main()메소드를 가지는 클래스가 반드시 하나는 존재해야 함

    main()메소드는 반드시 public static void로 선언되어야한다.



    클래스는 한 개 이상의 필드(field)메소드로(method) 구성



    필드(field)클래스에 포함된 변수(variable)


    변수 : 데이터를 저장할수 있는 메모리 공간

    자바에서는 다음과 같이 8가지 종류의 기본형 변수를 제공

    - 정수형 : byte, short, int, long

    - 실수형 : float, double

    - 문자형 : char

    - 논리형 : Boolean



    클래스 내에서 필드는 선언된 위치에 따라 다음과 같이 구분한다.

    1
    2
    3
    4
    5
    6
    7
    8
    class car {
        static int modelOutput; // 클래스 변수
        String modelName;       // 인스턴스 변수
     
        void method() {
            int something = 10// 지역 변수
        }
    }
    cs


    1. 클래스 변수(static variable) : 클래스 영역에 위치한 변수 중에서 static 키워드 가지는 변수

    2. 인스턴스 변수(instance variable) : 클래스 영역에 위치한 변수 static 키워드 가지지 않는 변수

    3. 지역 변수(local variable) : 메소드나 생성자, 초기화 블록 내에 위치한 변수


    선언된 위치에 따라 구분되는 변수는 생성 소멸 시기, 저장되는 메모리 공간과 사용 방법까지도 서로 다름




    메소드(method)? 어떠한 작업을 수행하기 위한 명령문의 집합


    클래스 내에서 메소드는 static 키워드의 여부에 따라 다음과 같이 구분됩니다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Car {
        boolean door; // 인스턴스 변수
        void openDoor() {  // 인스턴스 메소드
            door = true;
        }
        static void toggleDoor(boolean d) { // 클래스 메소드
            return !d;
        }
    }
     
    cs

    1. 클래스 메소드(static method) : static 키워드 가지는 메소드

    2. 인스턴스 메소드(instance method) : static 키워드 가지지 않는 메소드



    **static 키워드** 

    프로그램 시작시 최초에 단 한번만 생성되고 초기화 됨

     static이 붙으면 클래스의 모든 객체가 공유 가능 심지어 클래스 객체 생성 없이도 호출하여 사용 가능

     다른 클래스에서 접근하려면 class명.static변수명 써주면 됨




    클래스 앞에 붙은 접근 제어자가 무엇이냐.


    객체 지향에서 정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념이다.

    그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 된다.


    자바에서는 이러한 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공한다.


    접근 제어자의 종류

    ① private

    private 접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근할  없습니다.

    ② public

        public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 있습니다.

    ③ default

    접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어를 가지게 됩니다.

         default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 있습니다.

    protected

    protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급됩니다.


    접근 제어자의 접근 범위가 보다 많은 제어자부터 적은 제어자 순으로 나열하면 

    public > protected > default > private



    접근 제어자말고 다른 제어자는 무엇이 있느냐.


    제어자 종류

    ① static //위에서 다룸

    ② final

    변경할 수 없다는 의미로 사용. c++에서 const랑 똑같은 기능

    필드나 지역 변수에 사용하면 값을 변경할 수 없는 상수(constant)가 되고

    클래스에 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없게 된다.

    메소드에 사용하면 해당 메소드는 오버라이딩(overriding)을 통한 재정의가 불가능 하다.

    ③ abstract // 객체지향프로그래밍 설명할때 다룸

    abstract class Car {       // 추상 클래스

        abstract void brake(); // 추상 메소드

    }

    클래스나 메소드에 붙일 수 있음

    반드시 사용해야하는 메소드를 추상 클래스에 추상 메소드로 선언해놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의 해야 한다.

    '학교 수업 > 자바프로그래밍' 카테고리의 다른 글

    자바 개념 6(thread)  (0) 2020.04.23
    자바 개념 5(socket programming의 바탕 TCP/IP)  (0) 2020.04.23
    자바 개념 4 (입출력)  (0) 2020.04.18
    자바개념3 (상속)  (0) 2020.04.16
    자바 개념  (0) 2020.04.16

    댓글

Designed by Tistory.