연습문제 6-6 ~ 6-19

김도형·2022년 10월 3일
0

6-6


Math.pow 사용해서 거리를 구해도 되지만 한번 더 곱해서 계산했다.

package ch6;

public class Exercise6_6 {
    static double getDistance(int x, int y, int x1, int y1) {
        // 1. 거리 계산 + 2. 형변환
//        Double distance = (double)((x-x1)*(x-x1) + (y-y1)*(y-y1));
        return Math.sqrt((x-x1)*(x-x1) + (y-y1)*(y-y1));



    }
    public static void main(String args[]) {
        System.out.println(getDistance(1,1,2,2));
    }
}

나는 미리 distnace 라는 변수 타입을 Double 형변환하여 반환타입 double에 맞게 설정했다.
int -> double 로 자동 형변환이 되지만 직접 눈으로 보는 게 확실해서 사용했다.

6-7


해당 문제는 인스턴스 메서드를 사용하는 게 중점이다.

package ch6;

class MyPoint {
    int x;
    int y;
    MyPoint(int x, int y) {
        this.x = x;
        this.y = y;
    }
/*
    (1) 인스턴스메서드 getDistance를 작성하시오.
*/
    double getDistance(int x1, int y1){
        return Math.sqrt((x-x1)*(x-x1) + (y-y1)*(y-y1));
    }
}
class Exercise6_7 {
    public static void main(String args[]) {
        MyPoint p = new MyPoint(1,1);
        // p와 (2,2)의 거리를 구한다.
        System.out.println(p.getDistance(2,2));
    }
}

6-8

  • 클래스변수(static 변수) : width, height
  • 인스턴스 변수 : kind, num
  • 지역 변수 : k, n, card, args

6-9


클래스 변수와 메서드가 되기 위해서는 공통의 속성(변수)를 가져야 한다.
여기서 "단, 모든 병사의 공격력과 방어력은 같아야한다." 중점이다. 모든 병사의 공통 속성인 것이다.
static int waepon
static int armor
static void weaponUp
static void armorUp

6-10


정답 : b, e

  • b : 생성자가 객체를 생성할 때 사용되기는 하지만, 객체를 초기화할 목적으로 사용된다.
    객체를 생성하는 것은 new 연산자이다.
  • e : 생성자도 오버로딩이 가능해서 하나의 클래스에 여러 개의 생성자를 정의할 수 있다.

6-11


정답 : b, d

  • b, d : 인스턴스 메서드 내에서만 사용 가능

6-12


정답 : c, d
오버로딩 성립 조건
1. 메서드의 이름이 같아야함.
2. 매개변수의 개수나 타입이 달라야 한다.
3. 리턴 타입은 영향을 주지 않는다.

6-13


정답 : b,c,d

  • d : int b 가 서로 같아도 모두가 타입이 같아야 오버로딩 조건에 어긋난 것이다.

6-14


정답 : c, e

  • e : 클래스 변수는 클래스가 처음 메모리 로딩 될 때 자동 초기화
    인스턴스 변수는 인스턴스가 생성될 때 자동 초기화 됨
    클래스 변수가 더 빨리 초기화 됨.

멤버 변수 : 클래스 변수 + 인스턴스 변수

6-15


정답 : a

  • 클래스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭
  • 인스턴스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자

6-16


정답 : a, e

  • e
    • 힙(heap) 영역 -> 인스턴스가 생성되는 영역
    • 지역변수는 호출스택(call stack)에 생성

6-17


정답 : b
모두 대기 상태이다.

6-18


정답 : 라인 A, B, D

  • 라인 A : static변수의 초기화에 인스턴스변수를 사용할 수 없다.
    꼭 사용해야한다면, 객체를 생성해야한다.
  • 라인 B, D : static 메서드에서는 인스턴스 변수, 메서드를 사용할 수 없다.

6-19


정답
ABC123
After change:ABC123

0x200 객체 주소는 적절한 시기에 가비지 컬렉터에 의해 제거 됨.

출처 : Java의 정석 3rd Edition 도우출판

profile
3년간 웹/앱, 자동제어 QA 🔜 개발자로 전향하여 현재 교육 회사에서 백엔드 개발자로 근무 중입니다.(LinkedIn : https://www.linkedin.com/in/dohyoung-kim-5ab09214b)

0개의 댓글