Java-UML, 생성자, static

2 분 소요

UML

  • Unified Modeling Language (통합 모델링 언어)
  • 객체지향 소프트웨어에서 집약시스템을 개발할 때 산출물을 명세화, 시각화, 문서화 할 때 사용
  • 그 중 하나의 종류인 클래스 다이어그램이 있다.

  • 클래스 다이어그램
    • 클래스 내부의 정적인 내용이나 클래스 사이의 관계를 표현하는 다이어그램(그림)으로 시스템의 일부 또는 전체 구조를 나타냄.
    • 구성요소 : 클래스이름, 속성(필드), 기능(메소드) - (속성, 기능은 생략 가능)
    • 클래스이름, 필드, 메소드 순으로 사각형이 이루어져있고 앞에 부호는 -는 private, +는 public 이다. 클래스 다이어그램 예시

생성자

    Car myCar = new Car();
  • 위의 new가 객체 생성연산자
  • Car(); → 이게 생성자
  • 생성자란? → 객체가 생성될 때에 필드에 초기값을 제공하고 필요한 초기화 절차를 하는 메소드

  • 생성자 구조
      public Car () {
        
      } 
    
  • 접근제한자 클래스명 (매개변수) { 초기설정코드; }

  • 디폴트 생성자
    • 생성자 형식에 맞게 객체를 생성해야한다. 디폴트 생성자가 없는데 그냥 Car myCar = new Car(); 호출하면 에러뜸.
    • 클래스 작성 시 생성자를 하나도 만들지 않았을 경우 자동으로 비어져있는 디폴트 생성자 제공.
    • 하지만 생성자가 하나라도 정의되어있다면 디폴트 생성자는 만들어지지않음.
  • 생성자 오버로딩
    • 외부에서 제공되는 다양한 데이터를 이용해서 객체를 초기화하기 위해서는 생성자도 댜양화될 필요가 있다.
    • 자바는 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩을 제공.
    • 생성자 오버로딩이란 매개변수를 달리하는 생성자를 여러 개 선언하는 것.
  • 생성자에서 this(); 사용하기
      public Car(String color) {
              this(color, 80,100); 
      }
      public Car(String color, int speed) {
                      this(color, speed ,10000);
              }
              public Car(String color, int speed, int mileage) {
                      super();
                      this.color = color;
                      this.speed = speed;
                      this.mileage = mileage;
    
  • this();는 자신의 다른 생성자를 호출하는 코드, 무조건 블록내부 첫 줄에서만 쓸 수 있음.
  • 필드, 메소드 → 클래스를 구성하는 구성요소로 클래스를 통해 객체를 생성하면 각 객체마다 필드와 메소드가 생성

Static

  • 정적 필드
    • 모든 객체를 통틀어 하나만 있는 변수
    • 그냥 필드와 다르게 객체를 생성 안해도, 아무리 생성을 많이 해도 한 개만 존재하는 변수
    • 용도
      • 모든 객체가 하나의 데이터를 공유하기 위해서 (ex: numberOfCars 변수로 차 객체 생성할 때마다 넘버링하기)
      • 모든 객체에서 공통적으로 사용할 상수를 설정하기 위해서
      • 얘는 완전 클래스 자체의 절대 바뀌지 않는 필드네→ 접근할 때도 객체참조변수.정적필드가 아니라 객체의 클래스.정적필드 이렇게 쓰는게 맞는거. mycar.INCREASE가 아니라 Car.INCREASE 임. 객체가 없을 때에도 존재하며 접근할 수 있기때문이다.

비교하기

  • 지역변수 → 메소드 내에서 생성, 메소드가 종료될 때 사라짐.
  • 필드 → 클래스 내부에서 정의, 해당 클래스가 객체화될 때마다 각 객체에 생성, 해당 객체가 소멸할 때 사라짐.
  • 정적필드 → 클래스 내부에 static 키워드를 포함해서 정의, 프로그램이 실행될 때 생성, 프로그램이 종료될 때 사라짐. 다른 말로 클래스변수라고 불린다.

  • 정적 메소드
    • 정적필드에 private 주면 클래스 밖에서 접근이 안됨 → getter메소드 필요함 → 그래서 정적 메소드 이용

아래 코드 실수 꼭 꼭 명심하고 다신 실수하지 말자

  • 잘못된 문자열 비교 (name에는 문자열이 저장되어있는 주소값이 저장되어진 참조변수이다.)
      if (name == "hong")) {
                              return true;
                      } else {
                              return false;
                      }
    
  • 옳은 문자열 비교 (equals 메소드를 통해 name의 주소값이 아닌 실제 문자열값을 가져와서 비교한다.)
      if (name.equals("hong")) {
                              return true;
                      } else {
                              return false;
                      }
    

카테고리:

업데이트:

댓글남기기