본문 바로가기
JAVA/JAVA 기초 문법

[Java] 기본문법, 생성자, 오버로딩, this, 접근제어자, getter/setter, 멤버변수,용어

by 코끼리똥11 2024. 5. 31.

생성자

생성자는 클래스의 인스턴스가 생성될 때 호출되는 특별한 메서드이다. 주로 객체의 초기화를 담당한다. 생성자의 이름은 클래스의 이름과 같아야 하며, 반환 타입이 없다.

public class Product {
    private int number;
    private String name;

    // 기본 생성자
    public Product() {
        this.number = 0;
        this.name = "Unknown";
    }

    // 매개변수를 받는 생성자
    public Product(int number, String name) {
        this.number = number;
        this.name = name;
    }
}

메소드 오버로딩

메소드 오버로딩은 동일한 이름의 메서드를 여러 개 정의하되, 각 메서드가 서로 다른 매개변수 리스트(타입, 개수, 순서)를 가지는 것을 말합니다. 오버로딩을 통해 메서드의 기능을 다형적으로 구현할 수 있습니다.

 

public class MathUtils {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

 

this 사용하는 멤버변수

this 키워드는 클래스의 인스턴스 자신을 참조하는 데 사용됩니다. 주로 생성자나 메서드에서 매개변수와 멤버 변수의 이름이 같을 때 이를 구분하기 위해 사용됩니다.

 

public class Product {
    private int number;
    private String name;

    public Product(int number, String name) {
        this.number = number; // this.number는 멤버 변수, number는 매개변수
        this.name = name;     // this.name은 멤버 변수, name은 매개변수
    }
}

 

접근제어자

접근제어자는 클래스, 메서드, 변수 등의 접근 권한을 설정하는 키워드입니다. 주로 네 가지가 있습니다:

  • public: 모든 클래스에서 접근 가능.
  • private: 해당 클래스 내부에서만 접근 가능.
  • protected: 같은 패키지 내에서, 그리고 상속받은 클래스에서 접근 가능.
  • default (명시적 키워드 없음): 같은 패키지 내에서만 접근 가능.

 

public class Product {
    private int number;      // 클래스 내부에서만 접근 가능
    public String name;      // 모든 클래스에서 접근 가능
    protected double price;  // 같은 패키지와 하위 클래스에서 접근 가능
    String category;         // 같은 패키지 내에서만 접근 가능
}

 

클래스의 멤버변수에 데이터를 셋팅하는 방법

클래스의 멤버 변수에 데이터를 설정하는 방법은 주로 생성자, 메서드 또는 직접 접근(접근제어자가 허용될 경우)을 통해 이루어집니다.

 

public class Product {
    private int number;
    private String name;

    // 생성자를 통한 설정
    public Product(int number, String name) {
        this.number = number;
        this.name = name;
    }

    // 메서드를 통한 설정
    public void setNumber(int number) {
        this.number = number;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

getter/setter 함수

GetterSetter는 멤버 변수의 값을 읽고 설정하는 메서드입니다. 보통 캡슐화(encapsulation)를 위해 사용됩니다.

 

public class Product {
    private int number;
    private String name;

    // Getter
    public int getNumber() {
        return number;
    }

    public String getName() {
        return name;
    }

    // Setter
    public void setNumber(int number) {
        this.number = number;
    }

    public void setName(String name) {
        this.name = name;
    }
}

멤버변수와 로컬변수의 차이점

멤버 변수(인스턴스 변수)는 클래스에 선언되며 클래스의 인스턴스가 생성될 때마다 초기화됩니다. 클래스의 모든 메서드에서 접근할 수 있습니다.

로컬 변수는 메서드나 블록 내에서 선언되며, 해당 메서드나 블록이 실행될 때 생성되고 종료되면 소멸합니다. 해당 메서드나 블록 내에서만 접근할 수 있습니다.

public class Example {
    private int memberVariable; // 멤버 변수

    public void method() {
        int localVariable = 10; // 로컬 변수
        System.out.println(localVariable);
    }
}

 

용어

 

정의 예시
객체 클래스의 인스턴스로, 데이터와 해당 데이터를 처리하는 메서드를 포함하는 하나의 단위입니다. Product p1 = new Product();에서 p1은 객체입니다.
인스턴스 클래스를 기반으로 생성된 실제 객체를 의미합니다. Product p1 = new Product();에서 p1Product 클래스의 인스턴스입니다.
매개변수 메서드나 생성자에 전달되는 값 또는 변수를 의미합니다. public void setNumber(int number)에서 number가 매개변수입니다.
캡슐화 객체의 상태(데이터)를 숨기고, 외부에는 필요한 메서드를 통해서만 접근을 허용하는 객체 지향 프로그래밍의 원칙입니다. 멤버 변수를 private로 선언하고, 접근을 위해 gettersetter 메서드를 사용하는 것.
클래스 객체를 생성하기 위한 청사진(설계도)으로, 데이터와 메서드를 포함합니다. public class Product { private int number; private String name; public Product(int number, String name) { this.number = number; this.name = name; } }
메서드 클래스의 동작을 정의하는 함수입니다. 클래스의 데이터를 처리하거나 특정 작업을 수행합니다. public void setName(String name) { this.name = name; }
멤버 변수 클래스 내에서 선언된 변수로, 클래스의 속성을 나타냅니다. public class Product { private int number; private String name; }