Sinbum's blog
  • 인셉션 개발자
    • History
    • Editorial Board
    • 세미나
      • MS_빅데이터_분석_교육
      • Databricks_Musinsa_사례분석
      • Databricks_AMOREPACIFIC_사례분석
    • 개발자 꿀팁
  • 리눅스
    • 리눅스 기초
      • 기본명령어
      • 프록시서버
      • 온프레미스
      • systemd
      • 우분투 앱
      • vi 사용법
    • 도커
      • MSA 아키텍처
      • 도커 설명
      • 도커 설치
      • 도커 가이드
        • 컨테이너 만들기
        • 컨테이너 보관
        • 컨테이너 사용
        • 컨테이너 관리
        • 컨테이너 볼륨
        • 컨테이너 통신
        • 도커 연습
  • 언어
    • 자바
      • 자바(JAVA)는 무엇인가?
        • JVM 메모리
      • 자바 설치 가이드
      • 자바 언어 활용
        • 변수
        • static
        • 상수
        • 연산자
        • 제어문
        • 배열
        • CLI-자바사용
        • 클래스
        • 메소드
        • 값에의한 호출
        • GUI 프레임
        • 생성자
        • 오버로딩
        • 상속
        • 상속생성자
        • 접근제한자 와 가비지 컬렉션
        • 추상클래스 와 인터페이스
        • 다중구현
        • 예외처리
        • 컬렉션 프레임워크
        • 쓰레드
        • 네트워크
        • 다중 접속 서버 구현
      • 간단한 채팅 앱 개발하기
    • 파이썬
      • 파이썬(Python)은 무엇인가?
      • 파이썬 설치 가이드
      • 파이썬 언어 활용
        • 변수
        • 입력,출력
        • 타입선언
        • 자료구조
        • 주석처리
        • 문자열
        • 리스트
        • 반복문
        • 연산자
        • 조건문
        • 정규표현식
          • re 모듈
          • 메타문자1
          • 메타문자2
          • 그루핑
          • 전방탐색
          • 문자열 바꾸기
          • Greedy 와 Non-Greedy
      • 마치며...
  • 형상관리,CI/CD
    • 깃허브
      • 깃허브 협업 모델
      • 깃허브 설치 와 ssl
      • 깃허브를 잘쓰는 팁 모음
  • BigData
    • BigData 개념
      • OLTP,OLAP
      • ELT,ETL
      • DW
      • ObjectStorage
      • LambdaArc
      • OGG
    • Kafka
      • 환경설정 및 소스코드 다운로드
      • 아파치 카프카는?
        • 카프카의 시작
        • 카프카 특성
        • 빅데이터 아키텍처
      • 카프카 기초 개념
    • BuildApplications
      • Airflow
      • Grafana
    • PowerBi
      • DAX
        • REMOVEFILTERS
        • DAX_문법
        • DAX_함수
    • Azure
      • SynapseAnalytics
  • IOT
    • 아두이노
      • 설치 및 기초
      • 센서의 종류
      • led 출력하기
      • 시리얼 통신
      • 무선 통신
  • About
    • SINBUM
    • INTEREST
    • PROJECTS
      • 업무 프로젝트
      • 개인 프로젝트
        • 티스토리API를 사용한 블로그 앱
        • 노션 API와 블로그 연동 자동화 하기
        • 로지텍 마우스 수리
    • CONTACT
Powered by GitBook
On this page
  • 추상 클래스(abstract class)
  • 추상 클래스의 실습
  • final
  • final 클래스
  • final 메소드
  • 인터페이스 (Interface)
  • Interface의 구현
  • 인터페이스의 참조
  1. 언어
  2. 자바
  3. 자바 언어 활용

추상클래스 와 인터페이스

추상 클래스(abstract class)

  • 추상 메소드 . 기능이 구현되지 않고 stub, 원형만 선언되어 있는 메소드 입니다. . 중괄호 "{, }"가 생략되어 있습니다.

  예)
  public int add(int i, int j);

  public abstract int sub(int i, int j);
  • 추상 클래스는 추상 메소드가 1개이상 선언되어 있습니다.

  • 추상 클래스는 객체를 생성할 수 없습니다.

  • 추상클래스가 객체를 생성하려면 추상 메소드를 Overriding(구현) 해야 합니다.

  • 추상클래스를 구현한 클래스는 추상클래스를 상속받아 구현함으로 추상클래스 타입에 포함됩니다.(형변환)

추상 클래스의 실습

Sum.java

abstract class Sum {
//추상메소드 입니다.
public abstract String toString();

    public String sum(int i, int k){
        int sum = i+k;
        return ""+ sum;
    }


}

Sum_s1.java

class Sum_s1 extends Sum{
    //추상 메소드 Overriding(구현)
    public String toString(){
    return "class Sum_s1 extends Sum";
    }
}

Sum_s2.java

class Sum_s2 extends Sum{
    //추상 메소드 Overriding(구현)
    public String toString(){
    return "class Sum_s2 extends Sum";
    }
}

SumMain.java

public class SumMain {

    public static void main(String[] args) {
        Sum_s1 s1 = new Sum_s1();
        System.out.println(s1.sum(10, 20));
        System.out.println(s1.toString());
    
        Sum_s2 s2 = new Sum_s2();
        System.out.println(s2.sum(100, 200));
        System.out.println(s2.toString());
    
    }

}

final

final 클래스

final클래스는 상속될 수 없습니다.

public final class String extends Object implements Serializable, Comparable, CharSequence

    public class FinalTest extends String{  //ERROR
    
    }
    

final 메소드

자식 클래스가 Overriding 할 수 없습니다.

    public final String prn() {
    
    }

인터페이스 (Interface)

  • 추상 메소드로만 이루어져 있습니다."{}"가 없습니다.

  • 아래처럼 중괄호가 없고 메소드의 프로토타입만 선언되어 있으면 추상 메소드입니다. 예) public abstract void speedDown(int speed);

  • 추상메소드를 사용하는 이유는 앞으로 추가되거나 구현되어야하는 기능의 설계 역활을 하며 실제 기능은 구현하지 않고 메소드 프로토타입만 구현하는 것을 말합니다.

  • 추상 메소드는 건축물에서 구조를 이루는 철근과도 같고 설계도와 같은 역활을 합니다.

  • 외부에 공개할 메소드를 등록하는 목적으로도 사용됩니다.

  • 하나의 콤포넌트가 다양한 형태로 구현되어야 할 경우 인터페이스를 이용하면 콤포넌트의 사용법이 상당히 단순해 집니다.

  • 인터페이스를 구현한 클래스는 인터페이스상에 있는 추상 메소드를 전부 구현해야 합니다.

  • 인터페이스상에 있는 메소드를 하나라도 구현하지 않으면 인터페이스를 상속받은 클래스는 추상클래스가 됩니다.

  • A a_obj = new A(); 인터페이스는 객체를 만들 수 없습니다. 따라서 반드시 그 인터페이스를 구현한 클래스의 객체를 받아 사용하게 되어 있습니다.

        A memo;            // A인터페이스형 참조 변수 memo 선언  
      memo = new C1();   // C1은 A라는 인터페이스를 전부 구현한 클래스입니다.
  • 인터페이스에 선언된 메소드를 호출하면 그 인터페이스를 구현한 클래스의 메소드가 자동으로 호출됩니다.

  • 인터페이스를 이용하면 인터페이스를 구현하는 클래스들은 메소드의 형태가 같기 때문에 같은 메소드명을 이용하면서 다양한 구현을 할 수 있습니다. 이것은 마치 My-SQL용으로 개발된 프로그램을 Oracle 용으로 변경시에 JDBC 드라이버만 변경하면 프로그램이 작동하는 것과 같은 이치입니다.

Interface의 구현

Inter.java

public interface Inter {
    public abstract int add(int i, int j);    
    public int sub(int i, int j);
}

InterImpl.java

public class InterImpl implements Inter{
    public int add(int i, int j){
        return i+j;
    }
    public int sub(int i, int j){
        return i-j;
    }

    public static void main(String[] args) {
        InterImpl interImpl = new InterImpl();
        System.out.println(interImpl.add(10, 5));
        System.out.println(interImpl.sub(10, 5));
    
        //인터페이스는 기능이 구현되어 있지않음으로
        //객체를 생성할 수 없습니다.
        //----------------------------------------
        //Inter inter = new Inter();
    
        //인터페이스는 구현 클래스를 할당 받을 수 있습니다.
        //인터페이스 = 구현 클래스
        //----------------------------------------
         Inter inter2 = new InterImpl();
         System.out.println(inter2.add(100, 50));
         System.out.println(inter2.sub(100, 50));
    }

}

인터페이스의 참조

  • 인터페이스를 이용하여 메소드만 호출하는 경우는 인터페이스 타입을 그대로 사용합니다.

  • 각 클래스의 멤버 변수에 접근하는 경우는 그 클래스 타입으로 형변환을 해주어야 합니다.

  • 인터페이스에 변수를 선언한다면 주로 상수를 선언합니다.

  • 메소만 선언되는 경우가 대부분입니다.

  • 인터페이스 타입 객체 = new 인터페이스 구현 클래스

IR2.java

interface B {
    void display(String s);
}

D1.java

class D1 implements B {
    String str = "";
    public void display(String s) {
    str=s;
    System.out.println("☆☆☆☆☆☆☆☆☆ " + s);
    }
}

D2.java

class D2 implements B {
    String str = "";
    public void display(String s) {
    str=s;
    System.out.println("★★★★★★★★★ " + s);
    }
}

IR2.java

class IR2 {
    public static void main(String args[]) {
    //인터페이스 객체변수는 할당되는 객체에 따라 기능을 변경할 수 있습니다.
    
    B b = new D1();
    b.display("석모도 - 보문사 - 벤뎅이 회무침"); // 클래스 D1의 객체를 생성하여 memo에 할당

    b = new D2();
    b.display("대부도 - 방아머리 - 바지락 칼국수");
    
    //인터페이스 타입은 구현 클래스의 변수에
    //접근할 수 없습니다.
    //-------------------------------------
    //System.out.println(b.str);
    
    //구현 객체의 멤버변수에 접근하려면
    //인터페이스의 구현 클래스 타입으로 형변환을 합니다.
    //-------------------------------------
    D2 d2 = (D2)b;
    System.out.println(d2.str);
  
    }
}

Myinfo.java

package day10;

interface Myinfointer {
public String getName();
public String getPhone();

}

Myinfointer.java

class Myinfo implements Myinfointer {
private String name ;
private String phone;
private String address;
private int age;

Myinfo(){}
Myinfo(String name,String phone, String address, int age){
this.name= name;
this.phone = phone;
this.address = address;
this.age = age;
}

public String getName(){
return name;
}

public String getPhone(){
return phone;
}

public String getAddress(){
return address;
}
public int getAge(){
return age;
}
}

Myinfouse.java

public class Myinfouse {

  /**
   * @param args
   */
  public static void main(String[] args) {
      Myinfointer info = new Myinfo("개똥이","010-1111-2222","서울시 성북구",33);
      System.out.println("이름:"+info.getName());
      System.out.println("전화:"+info.getPhone());
      //System.out.println("주소:"+info.getAddress());
      //System.out.println("나이:"+info.getAge());
}


}
Previous접근제한자 와 가비지 컬렉션Next다중구현

Last updated 2 years ago