D+28 -열거형,객체.속성,생성자

Bku·2024년 2월 2일

학원 일기

목록 보기
25/67
post-thumbnail

열거형(자료형 중 하나)

public enum Week {
    // 열거형 상수라고 하고 관례적으로 대문자를 사용한다.
    // 상수에는 순서대로 정수가 들어간다
    TUESDAY,//1
    WEDNESDAY, // 2...
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

열거형 파일 종류가 따로 있다. class가 아니고 enum이라고한다.

Calendar함수

Calendar calendar = Calendar.getInstance();

        int week = calendar.get(Calendar.DAY_OF_WEEK);// DAY_OF_WEE가 숫자로 요일을 가져온다. ex) 일요일 = 1, 월요일 = 2

년도와 월도 가져올 수 있다. (DAY_OF_WEEK자리를 변경하면된다.)

날짜찍기

public void enumWeek(){
        Week today = null; // 열거형도 자료형이다.

//      자바에 달력 객체가 있다. ex) calendar, localDateTime
        Calendar calendar = Calendar.getInstance();

        int week = calendar.get(Calendar.DAY_OF_WEEK);// DAY_OF_WEE가 숫자로 요일을 가져온다. ex) 일요일 = 1, 월요일 = 2

        switch (week){
            case 1:
                today = Week.SUNDAY;
                break;
            case 2:
                today = Week.MONDAY;
                break;
            case 3:
                today = Week.TUESDAY;
                break;
            case 4:
                today = Week.WEDNESDAY;
                break;
            case 5:
                today = Week.THURSDAY;
                break;
            case 6:
                today = Week.FRIDAY;
                break;
            case 7:
                today = Week.SATURDAY;
                break;
        }
        System.out.println("오늘은 " + today);
    }

캘린더 함수는 숫자로 알려주기때문에 1이 어떤 요일인지 헷갈릴수 있다. 그래서 열거형과 swith로 1에 일요일.... 이렇게 계속 할당한 뒤 날짜를 숫자가 아닌 바로 요일로 알 수 있게 된다.

사실 열거형 아니어도 문자형으로 할 수 있는데 쓰는 사람도 있다더라. 잘쓰진 않는다고 한다.

객체

모든 사물은 속성과 기능으로 나뉜다. 예를 들어 사람이라는 객체가 있으면 이름, 전화번호, 주민번호 나이... 등이 있고, 기능으로는 말하기, 움직이기, 달리기... 등이 있다.

객체의 중요한 요소

위에서 말했듯이 객체에는 속성과 기능이 있다. 이것을 제외하고 하나가 더 있는데, 생성자라는 것이 또 있다.

  1. 속성(필드, 변수)
  2. 기능(함수, 메서드)
  3. 생성자

자동 필드 초기화

최초 변수에 값을 넣는 행위를 초기화라고 한다.
정수는 0을 넣고, 문자열에는 빈 문자열을 넣어놓는다.

     byte byteField;
    short shortField;
    int intField;
    long longField;

    char charField;
    
    boolean booleanField;

    float fField;
    double dField;

    String strField;

    int[] arrField;

이렇게 아무 값도 주지 않으면 정수는 0이들어가고, boolean은 false, char은 출력에서는 확인 불가하지만 \u0000값이 나온다.
또한 실수는 0.0, 문자열과 배열은 모두 null이 나온다.

메인에 찍어본 결과

생성자 함수

public class Car {
    String col;
    int ccNum;
    //생성자
    public Car(String col, int ccNum) {
        this.col = col;
        this.ccNum = ccNum;
    }
}

생성자는 반드시 클래스와 이름이 같아야한다. 나중에 객체를 호출할 때 클래스에 생성자를 넣어줘야하는데 이름이 다르면 안되기 때문.

또한 한 클래스에서 여러속성으로 여러개의 생성자를 만들 수 있다.

public class Car {
    String company = "현대자동차";
     String model;
     String color;
     int maxSpeed;

    public Car(String model) {
        this.model = model;
    }

    public Car(String model, String color) {
        this.model = model;
        this.color = color;
    }

    public Car(String model, String color, int maxSpeed) {
        this.color = color;
        this.model = model;
        this.maxSpeed = maxSpeed;

    }
}

즉 오버로딩이 가능하다는 것이다.

생성자 역할

값을 전달받아 속성에 저장하는 함수인데 꼭 사용자가 속성을 정의해야할 때 사용하면 된다.

생성자를 만들지 않으면 기본 생성자가 만들어진다. (생략 가능)

생성자를 사용하는 이유

서비스(Main 클래스가 아닌 Car 클래스)를 운영서버에 올리면 개발자도 손을 못 댄다. 할려면 날잡고 해야함. 그래서 최대한 소스에 실수를 없애야한다.

생성자를 지정해주지 않고 클래스에 값을 바로 입력해 놓으면, 나중에 속성을 바꾸고 싶을때 어려움이 생긴다.

하지만 생성자로 값을 넘겨주면 값을 변경하고 싶을때 main에서 값을 바꿔주면 되므로 다시 Car클래스를 손대지 않아도 된다.

this

생성자나 매개변수를 가지는 메서드에서 받아오는 매개변수의 이름과 자신이 가지는 속성의 이름이 같을 수 있다. 이때 이름이 헷갈릴 수 있으니 자신의 속성에 this를 붙여주어야 한다.

 public Car(String model, String color, int maxSpeed) {
        this.color = color;
        this.model = model;
        this.maxSpeed = maxSpeed;

    }

또한 this()형태로 사용도 가능한데 이것은 생성자를 뜻한다.

profile
기억보단 기록

0개의 댓글