면접준비(5)클래스

Tae hyun·2023년 4월 3일
0

출처: 자바의 정석 chapter 07 객체지향 프로그래밍2 p345~400

클래스 1)객체를 만드는 틀
2)하위클래스의 공통점을 모아둔 것

final class: 변경될 수 없는 클래스.객체를 만드는 틀로서만 기능함
->그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.

+final 메서드: 변경될 수 없는 메서드. final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없음.
+final 멤버변수,지역변수: 변수 앞에 final이 붙으면 값을 변경할 수없는 상수가 된다.

abstract 클래스 :클래스 내에 추상 메서드가 선언되어 있음을 의미함. 하위클래스의 공톰점 모아두는 것 만 가능함
-추상클래스 사용법: class 앞에 abstract를 붙이기만 하면 됨.

abstract class 추상클래스{
}

이렇게 하면 이 클래스를 사용할 때, 클래스 선언부의 abstract를 보고 이 클래스에는 추상 메서드가 있으니 상속을 통해 구현해주어야 한다는 것을 알 수 있음.
추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다.

+abstract 메서드: 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림.
사용예시

abstract class Animal{
abstract void cry();
}
class Cat extends Animal{
void cry(){
System.out.println("냐옹냐옹!");
	}
}

interface: 모든 메서드가 추상메서드여서 하위클래스의 공통점을 모아두는 것만 가능함.
추상클래스와의 공통점: 추상메서드를 갖는다. 객체 생성을 할 수 없다.
추상클래스와의 차이점: 추상클래스(abstract 클래스)보다 추상화 정도가 높아서 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
추상클래스=부분적으로만 완성된 미완성 설계도
인터페이스=구현된 것은 아무것도 없고 밑그림만 그려져 있는 기본 설계도

-인터페이스의 장점
1. 개발시간을 단축시킴
2. 표준화가 가능함
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있음
4. 독립적인 프로그래밍이 가능함

생활코딩 인터페이스로 계산기 만들기 협업한 예시
출처 : https://opentutorials.org/course/1223/6063

//1.계산기에 대한 약속을 정의하는 인터페이스
public interface Calculatable {
	public void setOprands(int first, int second, int third);
    public int sum();
    public int avg();
    	}
   //2.인터페이스를 구현한 가짜 클래스를 임시로 사용해 만든 애플리케이션
  class CalculoatorDummy implement Calculatable{
     public void setOprands(int first, int second, int third){
     }
     public int sum(){
     	return 60;
     }
    public int avg(){
    	return 20;
    }
  }
  
 public class CalculatorConsumer{
 	public static void main(String[]args){
    	CalculatorDummy c = new CalculatorDummy();
        c.setOprands(10,20,30);
        System.out.println(c.sum()+c.avg());
    }
 }
 
 //3.인터페이스에 따라 구현된 클래스
  class Calculator implements Calculatable{
  	int first, second, third;
    public void setOprands(int first, int second, int third){
      this.first=first;
      this.second=second;
      this.third=third;
    }
    public int sum(){
    	return this.first + this.second + this.third;
    }
   public int avg(){
   		return (this.first + this.second +this.third)
	}
  }
  //4.가짜 클래스인 CalculatorDummy를 실제 로직으로 교체
  public class CalculatorConsumer{
  	public static void main(String[] args){
    	Calculator c = new Calculator();
        c.setOprands(10,20,30);
        Systmem.out.println(c.sum()+c.avg());
    }
  }

추상클래스보다 인터페이스를 많이 사용하는 추세임.

profile
안녕하세요 개발하는 알파카입니다. https://github.com/oh-taehyun

0개의 댓글