본문 바로가기

Java

Day07

1.래퍼 클래스(Wrapper Class)
   //기본형 속도빠름                                                                                          //기본타입 stack에있음 주소저장x, 값이 저장
    -기본형(primitive type)변수 데이터를 객체로 취급해야 할 경우 객체로 포장해주는 클래스                    //stack주소저장 heap값저장 비교할때?
    -자바는 객체지향 언어지만 기본형이라는 예외를 둔 이유는 성능때문                                        //파이썬은 기본형x

래퍼 클래스의 필요한 이유
    -기본형 변수는 값을 저장하고, 참조형 변수는 주소를 저장하기 때문
    -컬렉션 프레임워크(자료구조)는 참조형 변수만을 다루기 때문                                            //자료찾을때 편한도구
    -멀티쓰레딩에서 동기화를 지원하려면 참조형변수가 필요하기 때문                                          //동기(실행다하고 다음으로 넘어감 ex)티켓 동시에x),비동기(프로그램 진행하다가 로딩진행중에도 프로그램을 사용가능하게하는 것)              //멀티쓰레딩 여러개가 한번에 프로그램이 도는것                                                                 //배열의단점 크기(갯수)를 지정해줘야함 ,다른타입을 같이 사용x,index번호를 모르면 처음부터 찾아야함
                                                                                                                                                                //장점 데이터를 넣을 때 순서대로 저장 index번호
                                                                                                                                                                //배열 vs Arraylist (자바의 기능=class) 장점 데이터 갯수를 정하지 않아도됨(편하다),속도는 조금느린단점
        래퍼클래스 (heap에 저장)                                                                                                                                                       //일반데이터타입을 넣을 수 x 데이터를 참조형으로 넣어줘야해서 래퍼 클래스가 필요.
byte->      Byte
short->     Short
int->       Integer
long->      Long
char->      Character
float->     Float
double->    Double
boolean->   Boolean

문자를 숫자로변환
String num ="100";
System.out.println(num+100);;                       //100100  문자열이어져서나옴
System.out.println(Integer.parseInt(num)+100);      // 200

박싱(Boxing)? 래퍼클래스로 만들어줌
기본타입을 래퍼클래스로 변환
ex) int num =10;
    Integer i = new Integer(num);

언박싱(Unboxing)
래퍼클래스를 기본타입으로 변환
int num = i.intValue();     //10을 꺼내서 i에 넣어준다

2.static
-모든 객체가 공유한다는 의미
-static이 붙은 변수는 class 변수라고 부름
(static이 붙지 않은 변수 instance변수라고 부름) //일반적으로 변수라고 부름
-메모리에 우선 로드되므로 속도가 빠름
-메모리가 회수되지 않기 때문에 사용시 주의                //static 객체를 만들지 않아도 메모리에 저장되지만 메모리에서 회수x garvege 에서 지울수x 프로그램 종료 전까지 유지된다.

static 변수에 적용
-모든 객체가 변수를 공용으로 사용     //예제 class Button

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

        }
메소드에 적용
    객체를 사용하지 않고 클래스.메소드 이름으로 적용하여 사용
    ex)Math.random()
//static변수는 class변수 아니면 객체생성할때 static사용

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

왜필요?
-변수의 타입으로 선언하는 용도와 상속의 본연의 기능으로 특정한 코드를 하위 클래스로 물려주기 위해 생성

추상클래스의 다형성
-추상클래스는 "다형성"을 보장하기 위해 나타난 개념
-자식클래스에서 반드시 메소드를 재정의해야함 ->다형성 보장

✅추상화
공통된 행동, 필드를 묶어 하나의 클래스를 만드는 것
✅추상 메서드
메소드 선언만 되어있고 구현부가 없는 메서드

    public abstract class 이름{          //abstract
        abstract 리턴타입 메서드 이름();         //껍데기만있음
    }

4.인터페이스(interface)              //추상메소드 vs 인터페이스(틀만있는영수증 내용x 틀만있는? 틀에 대한 가이드)
-자바는 다중 상속을 지원하지 않으므로 인터페이스를 사용해서 다중 상속을 구현
-다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서 다른 클래스 사이의 매개 역할을 담당하는 일종의 추상 클래스와 비슷
-인터페이스는 추상 메소드와 상수만을 포함할 수 있음 -->    ""인스턴스 메소드, static메소드도 포함""


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

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

    }

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

    }


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

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

//client 정보 제공받는쪽(정보요청)<-> server정보 주는쪽 (정보)
//프로토콜 채팅안의 내용 틀(인터페이스)은 몇번인지 상관없이 고정

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

(final사용)
클래스에서 사용
-상속을 할 수 없게 됨
    final class 부모클래스명{
    ...
    }
    class 자식클래스명 extends 부모클래스명{ //에러!
    ...
    }
변수에서 사용(인터페이스)
-값을 재할당할 수 없음
    final String str ="apple";
    str = "banana"; //에러 (final이 붙어서 값을 재정의x)

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

    public class 자식클래스명 extends 부모클래스명{
        String method1(){   //에러 final이 붙어서!
        return 값2
        }
    }

패키지(Package)        //파일정리, 폴더개념을 쓰면 같은 이름으로 사용 가능
클래스 파일들을 체계적으로 관리하도록 사용하는 디렉토리 개념

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


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

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

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

메소드 접근 제한
-public, protected, default, private 모두 사용 가능
-추상 메소드의 형태는 private으로 선언할 수 없음         //오버라이딩으로 불러 올 수 없음?


과제.
1.아래 용어에 대해 조사하고 해당 용어에 대한 예를 작성해보자.  1.조사하고 예시만들기
-super 키워드
-this  키워드
-생성자
-오버로딩
-오버라이딩

2.인터페이스에 대해 알아보고 그에 대한 예제를 만들어보자.
예제3개이상

'Java' 카테고리의 다른 글

자바에 대한 이해  (0) 2023.03.16
Day07 - 01(래퍼 클래스)  (0) 2023.02.05
Day06 - 04  (0) 2023.02.01
Day06 - 03  (0) 2023.02.01
Day06 - 02  (0) 2023.02.01