본문 바로가기
명품 자바

명품자바 4장

by hoshi03 2023. 12. 23.

default - 다른 패키지에서는 접근 불가능

 

static - static 메서드는 static 멤버만 접근 가능하다, 객체 없이도 static 메서드는 존재하기때문에 this를 사용 불가능하다

 

final

클래스 앞에 사용하면 상속 불가능한 클래스

final 메서드는 오버라이딩 하지 못하고 무조건 상속받아서 사용하는 메서드

final 필드는 한번 초기화되면 값을 변경할 수 없는 상수가 된다

ShareClass 클래스에서 pi라는 상수를 만들면 다른 클래스에서는

ShareClass.pi 로 사용할 수 있다

 

자바 이론 문제

 

3번

Book [] book = new Book [10]; 으로 객체 배열을 만들면 바로 Book이 10개 생성되지 않는다,

book은 배열에 대한 레퍼런스이고 new로 할당을 해줘야 배열이 완성된다

 

6번

this()를 이용하면 같은 클래스 내의 다른 생성자를 호출하여 사용할 수 있다.

 

 

11번

 

다음 클래스에서 멤버 함수의 사용이 잘못된 것은?

class StaticTest {
    static int a;
    static int getA() { return a; } //(1)

    int b;
    int getB() { return b; } //(2)

    int f() { return getA(); } //(3)
    static int g() { return getB(); } //(4)
}

4번은 static 메서드에서 non static을 참조하려고 하기에 불가능하다

 

15. 가비지와 가비지 컬렉션은 표준 C나 C++에는 없는 자바 언어의 독특한 특성이다. 가비지란 무엇인지, 자바에서는 왜 가비지 컬렉션이 필요한지, 가비지 컬렉션이 개발자에게 주는 장점과 단점은 무엇인지 설명하라.

 

- 가비지란 new 연산자를 이용하여 시스템으로부터 할당받아 사용되다가 더 이상 사용하지 않는 객체나 배열 메모리를 말한다.

- 가비지가 많아지면  가용 메모리의 양이 줄어들어 자바 응용 프로그램의 실행에 영향을 줄 수 있다

 - 자바 가상 기계는 가용 공간이 일정 크기 이하로 줄어들게 되면 자동으로 가비지를 회수하여 가용 메모리 공간을 늘린다

 

 

실습문제

 

자바 클래스를 작성하는 연습을 해보자. 다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라.

public static void main(String[] args) {
   TV myTV = new TV("LG", 2017, 32); //LG에서 만든 2017년 32인치
   myTV.show();
}

LG에서 만든 2017년형 32인치 TV

 

TV 클래스

public class TV {
    int year;
    int inch;
    String name;

    TV(String name, int year, int inch){
        this.name = name;
        this.year = year;
        this.inch = inch;
    }

    void show(){
        System.out.println(name + "에서 만든 " + year + " 년 형 " + inch + " 인치 TV");
    }
}

 

Grade 클래스를 작성해보자. 3 과목의 점수를 입력받아 Grade 객체를 생성하고 성적 평균을 출력하는 main()과 실행 예시는 다음과 같다.

public static void main(String[] args) {
   // TODO Auto-generated method stub
   Scanner sc = new Scanner(System.in);
   
   System.out.print("수학, 과학, 영어 순으로 3개의 정수 입력 >> ");
   int math = sc.nextInt();
   int science = sc.nextInt();
   int english = sc.nextInt();
   Grade me = new Grade(math, science, english);
   System.out.println("평균은 "+me.average()); // average()는 평균을 계산하여 리턴
   
   sc.close();
}

 

Grade 클래스

 

public class Grade {
    private int math, science, english;

    Grade(int math, int science, int english){
        this.math = math;
        this.science = science;
        this.english = english;
    }
    public int average(){
        return (int) (math+science+english)/3;
    }

}

 

실습문제 3번 

'명품 자바' 카테고리의 다른 글

명품자바 7장 제네릭,컬렉션  (1) 2023.12.31
명품자바 6장 모듈, 패키지  (1) 2023.12.31
명품자바 5장  (1) 2023.12.26
가비지 발생시점  (0) 2023.11.17