본문 바로가기
Java/Java

국비지원 자바 복습 8(래퍼, 추상 클래스, 인터페이스, static)

by code2772 2022. 10. 5.

[ 목차 ]

    728x90
    반응형

    1. 래퍼 클래스(Wrapper Class) - 포장


    - 기본형(primitive type) 변수 데이터를 객체로 취급해야 할 경우 객체로 포장해주는 클래스
    - 자바는 객체지향 언어이지만 기본형이라는 예외를 둔 이유는 성능때문


    @배열의 단점
    1. 배열의 수를 미리 저장해야한다.(최댓값을 넘을 경우 새로 선언하거나 변경해야 하는 단점)
    2. 배열의 타입을 상이하게 사용할 수 없다.
    3. 인덱스 번호를 모를 경우 주소 값을 처음부터 일일히 대조해야한다는 단점을 가지고 있다.


    래퍼 클래스가 필요한 이유
    - 기본형 변수는 값을 저장하고, 첨조형 변수는 주소를 저장하기 때문
    - 컬렉션 프리임워크(자료구조와 데이터를 처리하는 알고리즘)는 참조형 변수만을 다루기 때문
    - 멀티쓰레딩(다수의 스레드를 동시에 이용하는 작업 )에서 동기화를 지원하려면 참조형변수가 필요하기 때문

     

     

    Wrapper 클래스



    @  스레드 : 프로세스 내 일을 처리하는 세부실행 단위 , 작업을 하나씩
    @ 비동기(Asynchronous) : 프로그램 작업이 완료되지 않아도 다른 작업을 실행할 수 있는 기능,
     동기보다 복잡해 오래 걸리는 경우가 있지만 다른 작업을 하여 자원을 효율적으로 사용 가능


     byte(일반) -> Byte(Wrapper)
     short -> Short
     int -> Integer
     long -> Long
     char -> Character
     float -> Float
     double -> Double
     boolean -> Boolean


    String num = 100;
    sout(num+100); // 결과 = 100100
    sout(Integer.parseInt(num) + 100) // 결과 = 200
    // Integer(Wrapper class)를 사용하여 문자 num을 정수형으로 포장하여 변경


    박싱(Boxing)
    - 기본타입을 래퍼클래스로 변환
    EX)  int num = 10;
         Integer i = new Integer(num); // 박싱이 되면서 래퍼 클래스로 변환한다.


    언박싱(UnBoxing)
    - 래퍼클래스를 기본타입으로 변환
    EX)  int num = i.intValue(); // i의 값을 num에 넣겠다.


    2. static


    - 모든 객체가 공유한다는 의미
    - static이 붙은 변수는 클래스 변수라고 부름
    (static이 붙지 않은 변수 instance 변수라고 부름)
    - 메모리에 우선 로드되므로 속도가 빠름
    - 메모리가 회수되지 않기 때문에 사용시 주의

    장점
    1. 시작시 힙에 저장시켜 준다.
    2. 변수에 사용시 클래스 객체를 생성하지 않아도 사용된다.


    변수에 적용
        - 모든 객체가 변수를 공용으로 사용
        - EX) Math.PI


    블록에 적용
        - 같은 객체가 여러개 만들어지더라도 단 한번만 실행되는 코드블로을 만듬
        static{

        }


    메소드에 적용
        - 객체를 사용하지 않고 클래스.메소드 이름으로 적용하여 사영
        - EX) Math.PI


    3. 추상 클래스 - 자식클래스에서만 사용


    - 하나 이상의 추상 메소드를 포함한 클래스
    - 객체 생성을 할 수 없음(자식 클래스에서 상속하여 객체를 생성, 자식클래스는 또 다른 클래스를 상속 받을 수 없음)
    - 변수의 타입으로 선언하는 용도와 상속의 본연의 기능으로 특정한 하위 클래스로 물려주기 위해 생성
    - 나머지 기능은 일반 클래스와 동일


    추상클래스의 다형성 - 메소드를 구현함으로 다른 클래스를 만들 수 있다.
    - 추상클래스는 "다형성"을 보장하기 위해 나타난 개념
    - 자식클래스에서 반드시 메소드를 재정의해야 함 -> 다형성 보장


    ✔ 추상화
    공통된 행동, 필드를 묶어 하나의 클래스를 만드는 것

    ✔ 추상 메서드
    메서드 선언만 되어있고 구현부가 없는 메서드

        public abstract class 클래스이름{

            abstract 리턴타입 메서드이름(); // 추상 메서드 : 부모에서 상속받은 것을 자식에서 구현하길 원한다.

        }




    4. 인터페이스(Interface) - 클래스가 아니며, 기능목적으로 사용하지 않으며 추상 메소드를 포함하기 위해 만든다.


    - 자바는 다중 상속을 지원하지 않으므로 인터페이스를 사용해서 다중 상속을 구현
    - 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서 다른 클래스 사이의 매개 역할을 담당하는
    일종의 추상 클래스와 비슷
    - 인터페이스는 추상 메소드와 상수만을 포함할 수 있음 -> 인터페이스 메소드, static 메소드도 포함(jdk8~)

    인터페이스 구현 - 인터페이스에서
        접근제어자 interface 인터페이스이름 {// 추상 메소드를 괄호 안에 넣는다.
            타입 상수이름 = 값; // public static final 타입 변수명으로 JVM이 자동으로 변환
            public 반환형 매소드명(매개변수1, 매개변수); // abstract를 작성하지 않아도 JVM에서 자동으로 abstract를 붙여줌
        } // 클래스의 틀을 만듬


    인터페이스 구현 - 클래스에서
        접근제어자 class 클래스이름 implements 인터페이스 이름 {

        }

     


    ✔ 상속과 인터페이스 구현을 동시에 하려면
         접근제어자 class 클래스이름 extends 부모클래스 이름 implements 인터페이스 이름 {

        }


     ✔ 상속과 다중 인터페이스 구현을 동시에 하려면 {
           접근제어자 class 클래스이름 extends 부모클래스 이름 implements 인터페이스이름1, 인터페이스이름2....... {

            }


    ✔ API(Application Programing Interface)
    응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 재어할 수 있게 만든 인턴페이스를 뜻함


    ✔ 인터페이스(Interface)
    개발코드와 객체가 서로 통신하는 접점 역할


    상수(final)
    - 클래스, 변수, 메소드에서 사용할 수 있는 키워드
    - 뱐할 수 없는 상태를 나타냄


    클래스에서 사용
    - 상속을 할 수 없개됨
        final class 부모클래스며예{
        .........
        }
        class 자식클래스명 extends 부모클래스명{ // 에러! 상속불가!
        .........
        }


    변수에서 사용
    -값을 재할당할 수 없음
        final String str = "apple";
        str = "banana"; // 에러! str에 값 재할당 불가!


    메소드에서 사용
    - 오버라이딩을 할 수 없음
        class 부모클래스명 {
        final String method1(){
                return 값
            }
        }

        public class 자식클래스명 extends 부모클래스명 {
            String method1(){   //에러!
             return 값;
         }
       }


    5. 패키지(Package)


    클래스 파일들을 체계적으로 관리학도록 사용하는 디렉토리 개념

    ✔ 패키지를 생성하지 않고 저장된 기본 파일들이 저장된 공간을 default package라고 부름



    6. 접근 제어자


    외부에 공개되는 수준을 의미
    1. public : 모든 외부에서 직접 접근하거나 호출
    2. protected : 현재 클래스와 동일한 패키지거나 다른 패키지더라도 상속시 접근하거나 호출
    3. default : 현재 클래스와 동일한 패키지 내에서만 접근하거나 호출(접근 제어자를 쓰지 않은 경우 default)
    4. private : 현재 클래스의 {} 바깥족에서는 절대 접근하거나 호출할 수 없음

    클래스의 접근 제한 (만들경우)
    - public, default만 사용 가능
    - public인 경우 외부에 클래스를 노출, default는 현재 패키지에서만 접근할 수 있게 함

    필드의 접근 제한
    - public, protected, default, private 모두 사용 가능
    - 일반적으로 private, public static으로 선언하는 것이 일반적

    메소드의 접근 제한
    - public, protected, default, private 모두 사용 가능
    - 추상 메소드의 형태는 private으로 선언할 수 없음


     과제.
    1. 아래 용어에 대해 조사하고 해당 용어에 대한 예를 작성해보자.
    - super 키워드 : 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에 참조하는데 사용하는 참조변수
    인스턴스 변수의 이름과 지역 변수의 이름이 같은 경우 인스턴스 변수 앞에 this 키워드를 사용하여 구분가능
    부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별 가능하다. 즉 super
    참조변수를 사용하여 부모 클래스의 멤버에 접근 가능하다.
    - this 키워드 : 현재 클래스 안의 개체를 가져오는 참조 변수를 의미합니다.
    - 생성자
    - 오버로딩
    - 오버라이딩

    2. 인터페이스에 대해 알아보고 인터페이스에 대한 예제를 만들어보자.
    인터페이스(interface)란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서,
    다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다.
    자바에서 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있다.

    반응형