본문 바로가기
Java(17+) 문법/Java 기본

[Java] 클래스 - 메서드

by cogito21_java 2025. 1. 21.
반응형

- 클래스는 상태(멤버 변수)와 동작(메서드)을 가지고 있음

- 메서드(method): 클래스  안에 있는 함수

- Java는 모든 것을 클래스 기반으로 작성하기 때문에 함수도 클래스 안에 위치

- 지역 변수는 Stack 영역에 생성

- static 변수/메서드는 Static 영역에 생성

- 참조 타입은 Heap영역에 생성


클래스

클래스

- 클래스명은 PascalCase

- 클래스는 멤버 변수(상태)와 메서드(동작)을 가지고 있음

- Java는 객체 지향 언어(OOP)이고 Java의 모든 것은 클래스 안에 존재

- 클래스 인스턴스화시 변수는 클래스 인스턴스의 메모리 주소(Heap 위치)로 초기화

더보기
더보기

클래스 정의

public class ClassName{
    type member_var = value; // 멤버 변수(상태)
    
    public ClassName() { // 생성자
    }
    
    public ClassName(type param1) { // 생성자
        this.member_var = param1;
    }
    
    public type method(type param1, type param2) { // 메서드(동작)
        실행되는 코드; 
        return value; // 반환 값;
    }
    
    public static void main(String[] args) {
        실행되는 코드;
    }
}

클래스 생성(인스턴스화)

ClassName classVar = new ClassName();
ClassName classVar = new ClassName(value1, ...);

멤버변수 접근

className.member_var;

클래스 예시

더보기
더보기
public class Dog {
    String name;
    
    public Dog(String name) {
        this.name = name;
    }
}

public class DogTest {
    public static void main(String[] args) {
        Dog d1 = new Dog("Henry");
        System.out.println(d1.name);
    }
}

메서드

메서드

- 메서드명은 camelCase

- 클래스 내에 위치

- 메서드 사용시 중복 코드 제거

- 메서드 구성요소: 접근 제어자, 리턴 타입, 메서드명

- 접근 제어자: 메서드를 호출할 수 있는 범위. public, protected, default, private. 메서드, 클래스, 변수에서 사용

- 접근 제어자는 가독성을 위해 명시적으로 사용

+) 캡슐화: 서로 연관 있는 변수나 메서드를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 하는 것

+) 패키지는 디렉토리를 의미

더보기
더보기

접근 제어자 종류

접근 제어자 설명
public 모든 클래스에서 접근 가능 / 다른 패키지에서도 접근 가능
protected 같은 패키지 내의 클래스와 해당 클래스를 상속한 외부 패키지의 클래스에서 접근 가능
default 접근 제어자를 쓰지 않는 경우 기본값 / 같은 패키지 내의 클래스에서만 접근 가능
private 해당 클래스 내부에서만 접근 가능

변수 접근 제어자

접근제어자 type varName;

- 리턴 타입: 메서드를 실행한 결과가 가지는 타입. 원시 타입(primitive type)과 참조 타입(reference type). return으로 결과 반환 필요. 리턴한 결과가 없다면 void 사용

- 메서드명: 메서드의 이름으로 메서드 호출시 사용

- 메서드명 기능을 유추할 수  있도록 작성. camelCase로 작성. 동사 포함. is의 경우 boolean 리턴

- return: 리턴값을 반환하거나 함수 종료

- 매개변수(parameter): 메서드에 전달된 값을 저장하는 변수. 타입을 지정해야 함

- 인수(argument): 메서드 호출시 전달되는 값

- 메서드 인수 전달시 (매개변수 개수 > 인수 개수) 또는 (매개변수 개수 < 인수 개수)라면 예외 발생

- Java에서 Primitive Type으로 매개변수 전달시 Call by Value(값이 복사되어 전달) 방식을 사용

- Java에서 Reference Type으로 매개변수 전달시 Call by Reference(주소가 복사되어 전달) 방식을 사용

 

더보기
더보기

메서드 선언

public class ClassName {
    ...
    접근제어자 type methodName() {
        return 반환값;
    }
}

메서드 호출

public class Main {
    public static void main(String[] args) {
        ClassName className = new ClassName(); // 클래스 인스턴스화
        ClassName className = new ClassName(arg1, ...);
        className.method();  // 메서드 호출
        type varName = className.method();  // 메서드 호출. 리턴값 반환
    }
}

메서드 선언(매개변수)

public class ClassName {
    ...
    접근제어자 type methodName(type param1, ...) {
        return 반환값;
    }
}

메서드 호출(인수 전달)

public class Main {
    public static void main(String[] args) {
        ClassName className = new ClassName();
        ClassName className = new ClassName(arg1, ...); // 클래스 인스턴스화
        className.method(arg1, ...);  // 메서드 호출
        type varName = className.method(arg1, ...);  // 메서드 호출. 리턴값 반환
    }
}

메서드 예시

더보기
더보기
public class Dog {
    public void bark() { // 메서드 정의
        System.out.println("bowwow");
    }
    
    public static void main(String[] args) {
        Dog holl = new Dog(); // 클래스 인스턴스화
        holl.bark(); // 메서드 호출
    }
}

메서드 예시2

더보기
더보기
public class Calculator { 
    public void add(int x, int y) { // 메서드 정의
        return x + y;
    }
    
    public void sub(int x, int y) {
        return x - y;
    }
}

public classs CalculatorTest {
    pulbic static void main(String[] args) {
        Calculator calculator = new Calculator(); // 클래스 인스턴스화
        int addResult = calculator.add(3, 4); // 메서드 호출
        int subResult = calculator.sub(2, 5);
        System.out.println(addResult);
        System.out.println(subResult);
    }
}

메인메서드

- Java에서는 메인 메서드를 가장 먼저 찾아서 실행

- static이 붙은 클래스, 변수, 메서드는 Java Application이 시작될 때 인스턴스화가 되고 Java 프로글이 종료 될 때 제거

- static이 없는 일반 클래스는 Garbage Collection의 대상

- 메인 메서드 구성요소: 접근제어자, static, 리턴타입, 메서드명, 매개변수

- 접근제어자는 public이여야 JVM에서 접근 가능

- static 키워드 사용한 객체는 메모리의 static 영역에 컴파일되는 순간 인스턴스화됨

- 메인 메서드를 호출하는 곳은 JVM이 유일하고 단 한번의 호출을 함. 메임메서드의 용도는 Java Application의 시작점.

- JVM은 리턴값을 요구하지 않으므로 리턴 타입은 viod로 고정

- 메서드명은 main으로 고정. 싱행후 main이라는 이름을 찾기 때문

- 매개변수 String[] args는 Java 프로그램 실행시 특정 값을 전달받는 매개변수

더보기
더보기
public static void main(String[] args) {

}

Static 메서드

- static을 붙이면 JVM 실행시 인스턴스를 생성하므로 new를 이용하여 인스턴스를 생성하지 않고 모든 곳에서 메서드 호출 가능

- 정적 메서드(static method): static을 붙여 선언하는 메서드. 여러 곳에서 사용하는 유틸리티 메서드 작성시 사용

더보기
더보기

static method 선언

public class ClassName {
    접근제어자 static type staticMethod() {
        실행되는 코드;
    }
}

static method 호출

ClassName.staticMethod(arg1, ...);

static method 예시

더보기
더보기
public class Calculator {
    public static int add(int x, int y) { // static method 선언
        return x + y;
    }

    public static void main(String[] args) {
        int result = Calculator.add(3,5);
        System.out.println(result);
    }
}

Getter, Setter 메서드

- Java에서는 클래스의 멤버 변수의 접근 제어자로 private를 주로 사용

- getter, setter 메서드를 사용하여 private로 선언된 멤버 변수에 접근

- getter, setter는 멤버 변수에 직접 접근을 피하기 위해 사용

- getter: 해당 멤버 변수의 값을 가져오는데 사용. 일반적으로 get변수이름() 형식

- setter: 해당 멤버 변수의 값을 설정하는데 사용. 일반적으로 set변수이름(값) 형식

더보기
더보기

getter, setter 메서드 정의

public class ClassName {
    private type memberVar;
    
    public type getMemberVar() {
        return memberVar;
    }
    
    public void setMemberVar(type param1) {
        this.memberVar = param1;
    }
}

getter, setter 호출

ClassName className = new ClassName();
className.getMemberVar();
className.setMemberVar(arg1);

getter, setter 예시

더보기
더보기
public class Person {
    private String name;
    private int age;
    private int height;
    private int weight;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}

public class PersonTest {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("Henry");
        System.out.println(person.getName());
    }
}

메서드 오버로딩

- 객체 지향 프로그래밍(OOP)는 현실을 객체로 구현할 때 overloading을 사용

- method overloading: 객체 지향 프로그래밍에서 동일한 이름을 가진 메서드를 여러개 정의하는 것. 메서드명은 동일하지만 호출시 전달되는 매개변수의 종류와 개수, 순서에 따라 다르게 동작. 리턴 타입은 영향을 주지 않음

- method overriding: 메서드명과 매개변수의 종류, 개수, 순서가 동일한 것

더보기
더보기

메서드 오버로딩 정의

public class ClassName {
    public type method(type param1, type param2) {
        return param1 + param2;
    }
    
    public type method(type param1, type param2, type param3) { // 메서드 오버로딩
        return param1 + param2 + param3;
    }
}

메서드 오버로딩 호출

ClassName className = new ClassName();
className.method(arg1, arg2);
className.method(arg1, arg2, arg3);

메서드 오버로딩 예시

더보기
더보기
public class Calculator {
    public int add(int x, int y) {
        return x + y;
    }
    
    public int add(int x, int y, int z) {
        return x + y + z;
    }
    
    public double add(double x, double y) {
        return x + y;
    }
}

public class CalculatorTest {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        int result1 = calculator.add(3, 6);
        int result2 = calculator.add(1, 3, 6);
        double result3 = calculator.add(1.0, 4.0);
        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
    }
}

 

 

반응형

'Java(17+) 문법 > Java 기본' 카테고리의 다른 글

[Java] 예외처리  (0) 2025.01.22
[Java] 제네릭/Enum  (0) 2025.01.22
[Java] 클래스 - 생성자/상속/추상클래스  (0) 2025.01.21
[Java] 제어문  (0) 2025.01.21
[Java] 참고자료  (0) 2025.01.20