TIL | [Java] 생성자와 메서드

hyemin·2022년 1월 19일
0

Java

목록 보기
2/10
post-thumbnail
post-custom-banner

TIL(2) - Java의 생성자와 메서드에 대해 알아보자!
CodeLatte 강의자료를 참조했다.

1. 생성자(Constructor)


클래스 선언 후 객체를 프로그래밍에 사용하기 위해서는 생성자가 필요하다. 왜냐하면 클래스 선언 후 메로리에 생성된 객체의 인스턴스 변수는 초기화되지 않은 상태이기 때문이다. 생성자는 클래스 이름과 동일해야 하며 인스턴스 생성 후 한 번만 호출된다. 생성자를 사용하면 인스턴스를 좀 더 쉽게 초기화해 데이터를 저장하게 된다.

생성자 특징

  1. 생성자는 클래스명과 동일해야한다.
  2. 인스턴스 생성후 한 번만 호출된다.

1. 생성자 없이 인스턴스 변수에 데이터 저장하는 방법

Person person1 = new Person();
person.name = "사랑";
person.sex = "male";
person.age = 21;

Person person2 = new Person();
person.name = "믿음";
person.sex = "female";
person.age = 18;

2. 생성자를 사용하여 인스턴스 변수에 데이터 저장하는 방법

Person person1 = new  Person("사랑", "male", 21");

Person person2 = new  Person("믿음", "female", 18");

위의 두 방법 중 personN이 100개까지 만들어진다고 가정했을 경우 좀 더 좋은 방법은 2번 방법일 것이다.

생성자 만들기

class Person {
    String name;
    String sex;
    int age;
    
    // 생성자와(매개변수) : 생성자 == 클래스명
    Person(String name, String sex, int age) {
    	this.name = name;
        this.sex = sex;
        this.age = age;
    }
}    
// 매개변수의 자료형과 입력값이 일치해야 한다.
Person person = new Person("이름", "성별", 1);

※ 만약 생성자를 명시적으로 선언해주지 않으면 Java에서 자동으로 Default 생성자를 생성한다.

this 키워드

this 키워드는 키워드가 속한 클래스(아래의 예시에서는 Person)를 지칭한다. this 키워드로 클래스 범위 내 멤버 변수에 접근이 가능해진다.
단, 멤버 변수명과 생성자의 매개 변수명이 동일할 경우만 this 키워드로 멤버 변수에 접근 가능하다.

class Car {
	// 멤버 변수
	String engine;
    int carNumber;
    String handle;
    
    // 생성자
    Car(String engine, int carNumber, String handle) {
    	// this.변수명은 멤버 변수, 변수명은 매개 변수를 지칭
        this.engine = engine;
        this.carNumber = carNumber;
        this.handle = handle;
    }
}

2. 메서드(Method)


메서드는 객체 지향 프로그래밍에서 객체와 관련된 함수이다. 객체의 행위를 메서드라 할 수 있으며, 행위는 무엇인가를 하는 방법을 의미하는 것으로 생각하면 이해가 쉬울 것 같다. 하나의 메서드는 하나의 기능만을 수행하도록 작성하는 것이 좋다.

메서드를 사용하는 이유는

  1. 코드 가독성 - 비슷한 성격의 행위를 모아 놓기 때무에 다른 사람이 봤을 때 조금 더 쉽게 이해할 수 있다.
  2. 코드 재사용성 - 여러번 사용되는 코드라면 메소드를 사용해 메서드 호출만으로 구현이 가능하다.
  3. 유지보수 - 기능 변경이 필요할 때 용이하다.

메서드 형태

메서드는 기본적으로 반환값 여부/매개변수 여부에 따라 4가지 메서드 형태로 존재한다.

  • 반환값이 있는 메서드 - return값 자료형 입력 / return값 지정 필수
  • 반환값이 없는 메서드 - return값에 void 키워드 입력
  • 매개변수가 있는 메서드 - 메서드명(매개변수)
  • 매개변수가 없는 메서드 - 메서드명()

※ 메서드 실행을 종료하기 위해 반환값이 없는 메서드에도 return을 사용한다.

메서드 선언과 호출

메서드느 클래스 내부에 선언되어야 한다.
person.java - 메서드 선언(getName, getPergonInfo)

class Person {
    String name;
    String sex;
    int age;
    
        Person(String name, String sex, int age) { 
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    
    // getName 메서드 선언(반환값이 없고 매개변수가 있는 메서드)
    void getName(String name) {
        System.out.printf("내 이름은 %s이다.\n", name);
    }

    // getPergonInfo 메서드 선언(반환값이 있고 매개변수가 없는 메서드)
    String getPersonInfo() {
        return String.format("name: %s, sex: %s, age: %d", name, sex, age);
    }
}

Main.java - 메서드 호출

public class Main {
    public static void main(String[] args) {
        Person person = new Person("김하니", "female", 25);
        // 메서드 호출
        person.getName("홍길동");
        System.out.println(person.getPersonInfo());
 
    }
}

인스턴스 메서드와 정적 메서드

변수에도 인스턴스 변수와 정적 변수가 있는 것처럼 메서드에도 인스턴스 메서드와 정적 메서드가 존재한다.

인스턴스 메서드

인스턴스 생성 후 호출가능하다.

// 인스턴스 생성
Person person = new Person();
// 메서드 호출
person.getName("제니");

정적 메서드

객체를 인스턴스화하지 않고 호출가능한 메서드로 프로그램 시작시 메서드 내용이 적재된다.

메서드 선언 - return값 앞에 static제한자를 넣어주면 된다.

class Math {
    static int sum(int A, int B) {
        return A + B;
    }
}

메서드 호출 - 클래스명.메서드명(Math.sum)으로 호출한다.

int plus = Math.sum(3, 4);
System.out.println(plus);
// 7
post-custom-banner

0개의 댓글