[Java] 3_2_3_클래스 & 메서드 예제

나영원·2020년 8월 30일
0

Java_basic2

목록 보기
19/37
package src;

/**
 * MyMath 클래스 구현하기
 * 인스턴스를 생성할 수 없는 MyMath 클래스를 구현하시오.
 *
 * MyMath 클래스는 다음 정적 변수를 가진다.
 * PI = 3.1415927;
 * E = 2.718281;
 *
 * MyMath 클래스는 다음 정적 메소드를 가진다.
 * min - 정수 또는 실수를 여러개 입력받아 최소값을 구한다.
 * max - 정수 또는 실수를 여러개 입력받아 최대값을 구한다.
 * abs - 정수 또는 실수를 입력받아 절대값을 구한다.
 * floor - 실수를 입력받아 내림 연산한 정수를 출력한다.
 * ceil - 실수를 입력받아 올림 연산한 정수를 출력한다.
 */

public class MyMath {

    public static double PI = 3.1415927;
    public static double E = 2.718281;

    private MyMath(){}

    //min()
    static public int min(int... params) {
        int minVal=0;

        for(int i : params){
            minVal = i < minVal ? i  : minVal;
        }

        return minVal;
    }
    static public double min(double... params) {
        double minVal=0;

        for(double i : params){
            minVal = i < minVal ? i  : minVal;
        }

        return minVal;
    }
    //max()
    static public int max(int... params) {
        int maxVal=0;

        for(int i : params){
            maxVal = i > maxVal ? i  : maxVal;
        }

        return maxVal;
    }
    static public double max(double... params) {
        double maxVal=0;

        for(double i : params){
            maxVal = i > maxVal ? i  : maxVal;
        }

        return maxVal;
    }
    //abs()
    static public int abs(int i){
        return i >0? i : -i;
    }
    static public double abs(double d){

        return d>0? d: -d;
    }
    //floor
    static public double floor(double d){
        return  d>= 0 ? d-( d % 1) : d -  ( 1 + d % 1);
    }
    //ceil
    static public double ceil(double d){

        return d > 0 ? d  + ( 1 -(d % 1)) : d - (d % 1);

    }
}

class MyMathTest {
    public static void main(String[] args) {

        // MyMath m = new MyMath(); // 인스턴스 생성 불가
        System.out.println(MyMath.PI);
        System.out.println(MyMath.E);
        System.out.println(MyMath.min(2, 3, -4, 6, 3.0, 4.2, 7.3, -1.1, -4.2));
        System.out.println(MyMath.max(7, 0, 6, 16, -4, 3.0, 9.0, 21.0));
        System.out.println(MyMath.abs(4));
        System.out.println(MyMath.abs(-2.3));
        System.out.println(MyMath.floor(0));
        System.out.println(MyMath.ceil(-3.12312245));
    }
}

풀면서 배운점

  • 메서드 안에 불필요한 변수 생성하지 말기
  • 간단한 조건식은 삼항 연산자로 구하기
  • floor 와 ceil구할 때 입력값이 음수일 경우 생각 못한 것
package src;

/**
 * 싱글톤 패턴 구현하기
 *
 * 단 하나의 인스턴스만 존재할 수 있는 클래스 SingletonPattern을 구현하시오.
 *
 * 생성자를 외부에서 직접 호출할 수 없다.
 * 정적 메소드인 getInstance() 메소드를 이용해 객체를 받아온다.
 * 받아온 객체는 항상 같은 객체를 참조해야 한다.
 */

public class SingletonPattern {
    private final static SingletonPattern instance = new SingletonPattern();
                                                                            
    private SingletonPattern(){}

    public static SingletonPattern getInstance(){
        return instance;
    }


}

class SingletonPatternTest {
    public static void main(String[] args) {
        // SingletonPattern instance = new SingletonPattern(); // should fail
        SingletonPattern instanceOne = SingletonPattern.getInstance();
        SingletonPattern instanceTwo = SingletonPattern.getInstance();

        System.out.println(instanceOne == instanceTwo);
    }

}
  • 싱글톤 패턴 인스턴스 생성할때 final 붙여주면 수정불가라는 것 더 명확히 밝혀 줄 수 있음
package src;

/**
 * 3차원 벡터 클래스 구현하기
 *
 * 3차원 벡터를 클래스로 구현하시오.
 *
 * 속성
 * float타입의 x, y, z
 *
 * 생성자
 * Vector3D(float x, float y, float z)
 *
 * 메소드
 * - x, y, z에 대한 getter 및 setter
 * - add(): 벡터끼리의 덧셈, 실수와의 덧셈을 반환
 * - sub(): 벡터끼리의 뺄셈, 실수와의 뺄셈을 반환
 * - inner(): 두 벡터의 내적을 반환
 * - mul(): 실수와의 곱을 반환
 * - mag(): 벡터의 크기를 반환
 * - print(): 벡터의 내용을 "(%.3f, %.3f, %.3f)\n" 형식으로 콘솔에 출력
 */

public class Vector3D {

    float x;
    float y;
    float z;



    public Vector3D (float x, float y, float z){
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public void print(){

        System.out.printf("(%.3f, %.3f, %.3f)\n",x,y,z);

    }

    public Vector3D add(Vector3D v){

         return  new Vector3D(this.x + v.x,
                              this.y + v.y,
                              this.z + v.z);
    }

    public Vector3D add(float f){
        return  new Vector3D(this.x + f,
                             this.y + f,
                             this.z + f);
    }

    public Vector3D sub(Vector3D v){

        return  new Vector3D(this.x - v.x,
                             this.y - v.y,
                             this.z - v.z);
    }

    public Vector3D sub(float f){

        return  new Vector3D(this.x - f,
                             this.y - f,
                             this.z - f);
    }

    public float inner(Vector3D v){

        return (this.x * v.x) + (this.y * v.y) + (this.z * v.z);
    }


    public Vector3D mult(float f){
        return  new Vector3D(this.x * f,
                             this.y * f,
                             this.z * f);
    }
    public float mag(){
        return (float)Math.sqrt((Math.pow(this.x,2) + Math.pow(this.y,2)
                          + Math.pow(this.z,2)));
    }

    public float getX() {
        return x;
    }

    public void setX(float x) {
        this.x = x;
    }

    public float getY() {
        return y;
    }

    public void setY(float y) {
        this.y = y;
    }

    public float getZ() {
        return z;
    }

    public void setZ(float z) {
        this.z = z;
    }
}

class Vector3DTest {
    public static void main(String[] args) {
        Vector3D v1 = new Vector3D(0.5f, 0.2f, 0.9f);
        Vector3D v2 = new Vector3D(0.8f, 0.1f, 1.3f);

        v1.add(v2).print();
        v2.sub(v1).print();
        v1.add(0.2f).print();
        v2.sub(0.05f).print();
        System.out.println(v1.inner(v2));
        v1.mult(1.2f).print();
        System.out.println(v2.mag());
    }
}
  • 기본생성자 생성하지 않고 주어진 파라미터 생성자 활용할 수 있었던것 기억하기
  • 메서드안에 불필요한 변수생성 줄이고 return값에 수식넣기
  • 객체를 생성하거나 혹은 기존 객체의 값 바꾸는 방법 무슨 방법을 사용하던 하나로 통일해서 일관성있게 작성
profile
배우는 개발 일기

0개의 댓글