티스토리 뷰

반응형

 

 

🤔 제어자(modifier)란?

✔ 클랫와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여

 

출처 : 자바의 정석 남궁성 강의

 

출처 : 자바의 정석 남궁성 강의

 


 

🤔 static이란?

출처 : 자바의 정석 남궁성 강의

 

🤔 final이란?

출처 : 자바의 정석 남궁성 강의
출처 : 자바의 정석 남궁성 강의

 

 

🤔 abstract 란?

추상의, 미완성의

출처 : 자바의 정석 남궁성 강의

 

 

✅ 추상메서드란?

✔ 몸통이 없는 메서드

✔ 미완성 메서드

✔ 선언부만 있고, 구현부는 없다.

✔ abstract 키워드가 붙는다.

 

✅ 추상클래스란?

✔ 추상 메서드를 갖고 있는 클래스

 

추상클래스의 인스턴스 생성불가 ❌

abstract class AbstractTest { // 추상클래스 (추상메서드를 포함한 클래스)
    abstract void move(); // 추상 메서드(구현부가 없는 메서드)
}
 AbstractTest a = new AbstractTest(); // 에러!! 추상 클래스의 인스턴스 생성불가

 

추상클래스는 상속받아서 완전한 클래스를 만든 후에 객체 생성이 가능하다 ❗❗

 

 

 


🤔 접근 제어자(access modifier)란?

출처 : 자바의 정석 남궁성 강의

 

출처 : 자바의 정석 남궁성 강의

 

 

🤔 접근 제어자를 사용하는 이유?

✔ 외부로부터 데이터를 보호하기 위해서

✔ 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서

 

다음의 예제를 보자.

class Time {
    int hour;
    int minute;
    int second;
}

public class T2 {
    public static void main(String[] args) {
        Time t = new Time();
        t.hour = 100; 
        System.out.println(t.hour); // 출력결과 : 100
    }
}

 

시간이라는 객체를 생성하고

hour에 100이라는 값을 넣으면 어떻게 될까?

당연히 문제 없이 100이라는 값이 들어간다.

 

하지만 시간은 0~24까지의 범위만 유효하기 때문에 다음과 같이 수정해야 한다.

 

    class Time {
        private int hour; // 0~23 사이의 값을 가져야 함.
        private int minute;
        private int second;

        public void setHour(int hour) {
            if(hour < 0 || hour > 23) return;
            this.hour = hour;
        }

        public int getHour() { return hour; };
    }

    public class T2 {
        public static void main(String[] args) {
            Time t = new Time();
//            t.hour = 100;
            t.setHour(21); // hour의 값을 21로 변경
            System.out.println(t.getHour()); // 출력결과 : 21

            t.setHour(100);
            System.out.println(t.getHour()); // 출력결과 : 21
        }
    }

변수를 private로 변경하고

setHour, getHour() 함수를 만들어

hour 값을 변경한다.

 

조금 더 코드를 다음으면 다음과 같이 작성하면 된다.

    class Time {
        private int hour; // 0~23 사이의 값을 가져야 함.
        private int minute;
        private int second;

        public void setHour(int hour) {
            if(isValidHour(hour)) return;
            this.hour = hour;
        }

        // 매개변수로 넘겨진 hour가 유효한지 확인해서 알려주는 메서드
        private boolean isValidHour(int hour) {
            return hour < 0 || hour > 23;
        }

        public int getHour() { return hour; };
    }

    public class T2 {
        public static void main(String[] args) {
            Time t = new Time();
//            t.hour = 100;
            t.setHour(21); // hour의 값을 21로 변경
            System.out.println(t.getHour());

            t.setHour(100);
            System.out.println(t.getHour());
        }
    }

 

 


객체지향에 대해 확실히 배우고 나니

점점 코드를 체계적으로(객체지향적으로) 짜는 법을

알게 되어 뿌듯하다!!

그럼 오늘도 열공하자. 🔥

 

다음 포스팅에선

객체지향의 핵심인

'다형성'에 대해 공부하자.

반응형