본문 바로가기

JAVA

Java_6강

  static(정적인)

static은 인스턴스 없이 사용 가능한 필드(변수) / 메소드로 멤버에만 해당된다. (지역변수에는 붙지 않음)

 

제어자)

  • 접근제어자 : public, protectedm default, private
  • 기타제어자 : static, final

static 멤버 변수는 사용 시 클래스의 이름으로 사용되며, 같은 클래스로 만들어진 모든 인스턴스가 공유하는 공간이 된다.

 

인스턴스 멤버와 스태틱 멤버의 사용에 대한 제약사항)

  • 인스턴스 멤버는 스태틱 메소드에서 사용 불가 (인스턴스 멤버는 스태틱 메소드에서만 사용 가능)
  • 스태틱 멤버는 모든 경우에 사용 가능 => static 멤버는 보호하기 어려운 멤버이다.

  final 제어자

변수 앞에 final이 붙으면 상수가 된다.

final이 클래스 앞에 붙으면 => 상속 불가능한 클래스

final이 메소드 앞에 붙으면 => 재정의가 안 되는 메소드

  메소드의 다형성

하나의 클래스에 같은 이름의 메소드를 다수 정의하는 것이 메소드의 다형성이다. 또 다른 말로는 메소드 오버로딩(Method Overloading)이라고 한다.

 

오버로딩의 조건)

  • 메소드의 이름이 같아야 한다.
  • 매개변수의 개수 또는 자료형이 달라야 한다.
  • 반환형은 상관없다.
public class OverloadingTest {
    public static void main(String[] args) {
        System.out.println();//대표적인 오버로딩 메소드

        SimpleCal sc = new SimpleCal();
        int result = sc.add(10, 20);
        result = sc.add(1, 3.14f);
        float rf = sc.add(5.4f, 3.7f);
        result = sc.add(10, 20, 30);
    }
}

// 메소드의 이름이 모두 같지만 매개 변수의 개수 혹은 타입이 다름
class SimpleCal {
    public int add(int a, int b){ // 정수만 덧셈한다.
        int r = a + b;
        return r;
    }
    public int add(int a, float b){
        float r = a + b;
        return (int)r;
    }
    public int add(int a, int b, int c){
        int r = a + b + c;
        return r;
    }
//  오버로딩이 안 되는 경우
//    public float add(int x, int y){
//        float r = x + y;
//        return r;
//    }
    public float add(float a, float b){ // 실수 덧셈
        float r = a + b;
        return r;
    }
}

  생성자(Constructor)

생성자는 인스턴스가 생성될 때 호출(사용)되는 메소드이다.

기본 생성자는 생성자 중 매개가 없는 생성자를 말하는데, 생성자가 없는 클래스에는 자동으로 기본 생성자를 컴파일러가 작성하여 처리한다.

또한 생성자는 인스턴스를 생성할 때만 새용할 수 있는 특수한 메소드로 필드(멤버 변수)의 값을 초기화할 때 사용한다.

생성자는 인스턴스의 생성과 관련된 메소드이기 때문에 public으로 작성한다. (예외 존재)

 

인스턴스 생성 문법)

클래스명 인스턴스명 = new 생성자();

 

생성자의 특수성)

  • 클래스의 이름과 같은 이름을 갖는다. (대소문자까지)
  • 반환형을 작성하지 않는다. (void도 사용하지 않음)
  • 모든 클래스는 최소 하나의 생성자가 있어야 한다.

생성자 오버로딩)

생성자 오버로딩을 통해 다양한 매개변수를 갖는 여러 개의 생성자를 작성할 수 있다.

  멤버변수의 초기값

지역변수는 자동으로 초기값이 들어가지 않는다. 그러나 멤버변수는 자동으로 0에 해당하는 초기값을 넣어준다.

종류는 다음과 같다.

  • 정수형(byte, short, int, long) = 0
  • 실수형(float, double) = 0.0
  • 문자형(char) = '\0' <- null 문자
  • 논리형(boolean) = false
  • 문자형(String) = null

  this 키워드

this란 인스턴스를 구별하기 위한 방법으로 일종의 참조변수, 멤버를 지칭하는 대명사이다.

this.변수명 => 같은 이름의 멤버 변수와 지역 변수를 구분하는 용도

생성자를 나타내는 this() 메소드 => 유일하게 생성자를 호출하는 용도로 생성자 안에서 다른 생성자를 호출한다.

import com.dto.PhoneInfo;

public class ThisConstructorTest {
    public static void main(String[] args) {
        Car c1 = new Car("white");

        String str = "홍길동";

        PhoneInfo p = new PhoneInfo(str,
                "010-1234-5678",
                "12-12", 25);
    }
}

class Car {
    private String color;
    private String gearType;
    private int door;

    // 기본 생성자
    public Car() {}

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

    public Car(String color, String gearType) {
        // this.color = color;
        // this.gearType = gearType;
        this(color, gearType, 0);
    }

    public Car(String color, String gearType, int door) {
        this.color = color;
        this.gearType = gearType;
        this.door = door;
    }

    public void constrCall() {
        // this("white")
        // 생성자 this는 생성자 메소드에서만 사용할 수 있음
        // 인스턴스 생성 후 생성자인 this를 사용하는 것은 말이 되지 않음
    }
}

'JAVA' 카테고리의 다른 글

Java_8강  (0) 2022.09.23
Java_7강  (0) 2022.09.22
Java_5강(MVC 패턴 예제)  (0) 2022.09.20
Java_4강  (0) 2022.09.19
Java_3강  (0) 2022.09.18