코딩쿠의 코드 연대기

Java 클래스 본문

코딩스터디/JAVA스터디

Java 클래스

코딩쿠 2024. 11. 8. 21:51

학습목표

  • 클래스 정의하는 방법
  • 객체 만드는 방법(new 키워드)
  • 메소드 정의하는 방법
  • 생성자 정의하는 방법
  • this 키워드

클래스 정의하는 방법

클래스란?

객체를 만들기 위한 설계도 또는 틀 같은 것, 즉 클래스는 구현하고자 하는 객체의 속성과 기능들을 정의하는 설계도 따라서, 속성은 변수로, 기능은 메서드 (함수)로 나타냅니다.

 

객체지향 언어 : https://kuderi21.tistory.com/8

<클래스 정의하는 방법.>

<구조>
class 클래스명{
    // 속성(변수)
    // 기능(메서드)
}
* 클래스명은 앞 글자 대문자로 *

class ClassA {
    // 맴버 변수 (속성)
    String name;
    int  age;

    // 메서드 (동작)
    void f1(){
        System.out.println("f1()");
    }
}

public class Person {
  // 멤버 변수 (속성)
  String name;
  int age;

  // 메서드 (동작)
  public void sayHello() {
    System.out.println("안녕하세요, 저는 " + name + "입니다.");
  }
}

객체 만드는 방법 (new 키워드)(인스턴스화)

인스턴스(Instance)

: 클래스를 통해 만들어진 형태

인스턴스화?

: 클래스를 통해 실제 사용 가능한 객체를 생성하는 과정

클래스로 객체를 만든다?

-> 클래스로 객체 값을 만들어서 메모리를 할당(new)하고, 객체 값을 생성(클래스명())해서, 변수에 저장

자료형 참조변수 = new 클래스명();
자료형 객체변수 = new 클래스명();
public static void main(string[] args){
    ClassA ca = new ClassA();

    Person person1 = new Person(); // Person 클래스의 객체 생성
    person1.name = "홍길동"; // 객체의 속성에 값 할당
    person1.age = 20;
    person1.sayHello(); // 객체의 메서드 호출
}

메소드 정의하는 방법

Java에서 메소드를 정의하는 방법은 다음과 같습니다.

접근제어자 반환타입 메소드이름(매개변수) {
  // 메소드 내용
  return 반환값; // 반환값이 있는 경우
}

각 구성 요소에 대한 설명:

  • 접근 제어자: 메소드에 대한 접근 권한을 설정합니다.
    • public: 모든 곳에서 접근 가능
    • private: 같은 클래스 내에서만 접근 가능
    • protected: 같은 패키지 또는 하위 클래스에서 접근 가능
    • (default): 같은 패키지에서만 접근 가능
  • 반환 타입: 메소드가 실행 후 반환하는 값의 데이터 타입을 지정합니다. void는 반환값이 없음을 의미합니다.
  • 메소드 이름: 메소드를 식별하는 이름입니다.
  • 매개변수: 메소드를 호출할 때 전달되는 값들을 저장하는 변수입니다.
  • 메소드 내용: 메소드가 수행하는 작업을 기술합니다.
  • return 문: 메소드의 실행을 종료하고, 반환값이 있는 경우 해당 값을 반환합니다.

예시:

public class Calculator {

  // 두 정수를 더하는 메소드
  public int add(int num1, int num2) {
    int sum = num1 + num2;
    return sum;
  }

  // 문자열을 출력하는 메소드
  public void printMessage(String message) {
    System.out.println(message);
  }
}

메소드 호출:

public class Main {
  public static void main(String[] args) {
    Calculator calculator = new Calculator();

    int result = calculator.add(5, 3); // add 메소드 호출
    System.out.println(result); // 출력: 8

    calculator.printMessage("Hello, world!"); // printMessage 메소드 호출
  }
}

추가 정보:

  • 메소드 오버로딩: 같은 이름의 메소드를 여러 개 정의할 수 있습니다. 단, 매개변수의 개수 또는 타입이 달라야 합니다.
  • 가변 인자: 메소드에 전달되는 인자의 개수가 가변적인 경우 사용합니다.
  • 재귀 호출: 메소드 내에서 자기 자신을 호출하는 것을 의미합니다.

출처

Java에서 생성자를 정의하는 방법

class 클래스이름 {
  // 멤버 변수

  // 생성자
  클래스이름(매개변수) {
    // 멤버 변수 초기화
  }
}

생성자의 특징:

  • 클래스 이름과 동일: 생성자의 이름은 클래스 이름과 반드시 같아야 합니다.
  • 반환 타입 없음: 생성자는 반환값이 없으므로 void를 사용하지 않습니다.
  • 객체 생성 시 자동 호출: new 연산자로 객체를 생성할 때 자동으로 호출됩니다.
  • 멤버 변수 초기화: 객체 생성 시 멤버 변수를 초기화하는 데 사용됩니다.
  • 오버로딩 가능: 매개변수의 개수나 타입이 다르도록 여러 개의 생성자를 정의할 수 있습니다.

예시:

class Person {
  String name;
  int age;

  // 기본 생성자
  Person() {
    this.name = "이름 없음";
    this.age = 0;
  }

  // 매개변수를 갖는 생성자
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

생성자 사용 예시:

public class Main {
  public static void main(String[] args) {
    // 기본 생성자를 사용하여 객체 생성
    Person person1 = new Person();
    System.out.println(person1.name + ", " + person1.age); // 출력: 이름 없음, 0

    // 매개변수를 갖는 생성자를 사용하여 객체 생성
    Person person2 = new Person("홍길동", 20);
    System.out.println(person2.name + ", " + person2.age); // 출력: 홍길동, 20
  }
}

추가 정보:

  • this 키워드: 생성자 내에서 현재 객체를 참조할 때 사용합니다.
  • 기본 생성자: 클래스에 생성자를 명시적으로 정의하지 않으면 컴파일러가 자동으로 기본 생성자를 생성합니다.
  • 생성자 호출 순서: 상속 관계에서 부모 클래스의 생성자가 먼저 호출된 후 자식 클래스의 생성자가 호출됩니다.

출처

this 키워드

Java에서 this 키워드는 현재 객체(인스턴스)를 참조하는 데 사용됩니다. 쉽게 말해, this는 "자기 자신"을 가리키는 키워드라고 생각하면 됩니다.

this 키워드의 주요 용도:

  1. 멤버 변수와 지역 변수의 이름이 같을 때 구별하기:
    • 메소드 내에서 매개변수 또는 지역 변수의 이름이 멤버 변수의 이름과 같을 경우, 멤버 변수를 참조하기 위해 this를 사용합니다.
class Person { 
    String name; 
    void setName(String name) { 
            this.name = name; // this.name은 멤버 변수 name을 의미 
    }
}
  1. 생성자에서 다른 생성자를 호출할 때:
    • 생성자 내에서 this()를 사용하여 같은 클래스의 다른 생성자를 호출할 수 있습니다.
    • 이때, this()는 생성자의 첫 번째 줄에 위치해야 합니다.Java
class Person {
	String name;
    int age; 
    Person() {
    	this("이름 없음", 0); // 다른 생성자 호출
    }
    Person(String name, int age) {
    	this.name = name;
    	this.age = age;
    } 
}
  1. 현재 객체를 반환할 때:
    • 메소드에서 현재 객체 자신을 반환해야 하는 경우 this를 사용합니다.
    • 이는 메소드 체이닝을 가능하게 합니다.
class Person { 
	String name; 
	int age; 
	Person setName(String name) { 
		this.name = name; 
		return this; // 현재 객체 반환 
	} 
	Person setAge(int age) { 
		this.age = age; 
		return this; 
	}
}

위 예시에서 setName()setAge() 메소드는 this를 반환하므로 다음과 같이 메소드 체이닝을 사용할 수 있습니다.

  • Person person = new Person();
  • person.setName("홍길동").setAge(20);

참고:

  • this는 인스턴스 메소드와 생성자 내에서만 사용할 수 있습니다.
  • static 메소드에서는 this를 사용할 수 없습니다.

출처