본문 바로가기

Programming languages/JAVA

5. 접근 제어자, 추상(abstract), 인터페이스

728x90
반응형
public class fourth {

    public static void main(String[] args)
    {
        Calculator c1 = new Calculator();
        c1.setOprands(10,35);
        c1.sumDecoPlus();
        c1.sumDecoMinus();

        Calculator c2 = new Calculator();
        c2.sumDecoPlus();
        c2.sumDecoMinus();

        B b1 = new B();
        b1.d();

    }
}

class Calculator{
    //final은 값을 바꾸지 못하도록 한다.
    static final double PI = 3.14;

    //private 가장 엄격 같은 패키지 및 같은 클래스 안에서만
    private int left=1;
    private int right=3;

    //public 가장 자유롭게 사용
    public void setOprands(int left, int right){
        //this는 c1과 c2의 클래스 인스턴스를 구분하기 위해서 쓰인다.
        this.left = left;
        this.right = right;
    }
    private int _sum(){
        //클래스의 인스턴스 인지 아닌지가 명확해서 this 불필요
        return left+right;
    }
    public void sumDecoPlus(){
        System.out.println("++++"+_sum()+"++++");
    }
    public void sumDecoMinus(){
        System.out.println("----"+_sum()+"----");
    }
}

//abstract(추상) 메소드가 하나라도 존재하면 추상 클래스가 된다.
abstract class A
{
    //내용이 있는 메소드는 abstract를 가질 수 없다..!
    public abstract int b();

    //final로 선언된 메소드는 오버라이딩이 불가능하다.
    //final로 선언된 클래스는 상속이 불가능하다.
    final void c() {

    }

    public void d()
    {
        System.out.println("Hello,World! I am Abstract class");
    }
}
//abstract 클래스를 상속으로 사용하면 메소드를 반드시 오버라이딩 해야한다.
class B extends A
{
    @Override
    public int b() {
        return 0;
    }

}

//인터페이스 선언
interface I
{
    //인터페이스에 존재하는 메소드 선언
    //멤버는 반드시 public 이어야 한다.(외부에서 조작해야 하기 때문)
    public void z();

}

interface V
{
    public void kk();
}

//인터페이스도 상속이 가능하다.
interface Z extends V
{
    public void ex();
}


//class I_use는 인터페이스 I를 구현한다.
class I_use implements I,V
{
    //인터페이스에 선언된 메소드를 구현하는 것을 강제한다.
    public void z()
    {
        System.out.println("This is Interface");
    }

    public void kk()
    {
        System.out.println("여러개의 인터페이스를 포함 할 수 있습니다.");
    }
}

 

<출처: 생활코딩(https://opentutorials.org/course/1223/6061)>

- 접근 제어자는 사용자가 객체 내부의 변수나 메소드에 접근함으로써 발생 가능한 오작동을 방지하기 위해 존재한다.

- 인터페이스, 추상(abstract), final은 규제를 위해 사용된다.

- 추상 메소드를 가진 클래스는 반드시 추상 클래스가 되어야 한다.

- 추상 클래스는 상속을 이용해서만 사용 가능하다.

- 추상 클래스를 상속할 때 추상 메소드를 오버라이딩 해줘야 한다.

- 추상 메소드는 구체적인 내용을 가질 수 없다.(선언만 해야 함)

- 추상화는 대규모 작업에서 설계상 이점을 제공한다. 중복 코드 감소, 생산성+가독성 증가, 에러 감소, 유지 보수 시간 단축 등이다.

- 추상 클래스는 추상 메소드와 일반 메소드도 포함 가능하다.

- 인터페이스는 only 추상 메소드와 상수만 포함한다.

- 추상 클래스는 다중 상속을 지원하지 않지만 인터페이스와 일반 클래스는 지원한다.

- final은 abstract와는 다르게 변수값의 수정, 클래스 상속, 메소드 오버라이딩을 금지한다.

- 인터페이스에 존재하는 메소드를 implement 한 class에서 반드시 구현해야 한다.

- 인터페이스는 가짜 로직을 상정하고 만들 수 있기 때문에 개발 계획에 용이하다.

- 하나의 클래스로 여러 개의 인터페이스를 구현할 수 있다.

- 인터페이스도 상속이 가능하다.

- 인터페이스의 멤버는 반드시 public이다.(클래스에서 implement 해야 하기 때문에.)

 

 

728x90
반응형

'Programming languages > JAVA' 카테고리의 다른 글

자바 기초  (0) 2023.04.16
4. 오버로딩, 오버라이딩, 상속  (0) 2023.01.29
3. 클래스, 메소드, 인스턴스, Static  (0) 2023.01.25
2. 조건문, 반복문,배열  (0) 2023.01.25
1. 변수, 주석, 형변환, 연산자  (0) 2023.01.25