JAVA

JAVA 메서드와 this

테라시아 2024. 11. 12. 12:49

메서드(Method)
    - 클래스가 가지고 있는 함수
    - 본명 : member function

    public static void main(String[] args)
    접근제한자
          [static]
                  리턴타입
                       메서드명
                           (매개변수들)

    1) 접근제한자
        이 메서드를 누가 실행할 수 있는가?(권한)
        제일 넓은 권한은 public(누구나)

    2) static
        객체 생성을 하지 않아도 사용할 수 있다.
        왜 객체 생성을 안해도 되는가?
            => 객체마다 다를 게 없거든
            => 그래서 공통 영역에 만들어 지거든

    3) 리턴타입
        메서드는 값을 받기만 하는가? No
        일을 다 하고 결과를 전송해야할 때
        ex) int add(int a, int b)
            a와 b를 더해서 돌려주는 함수
        void : 돌려주는 거 없다
        int, float, double, String
        String[], int[], Person, Person[]

    4) 메서드명
        변수명 만드는 규칙과 동일, 일반적으로 동사+목적어(명사)
        printScreen, getMember, getAllVariables

    5) 매개변수
        메서드의 입력값(parameter, value, argument)
        입력값의 개수가 정해져 있을 때(String a)
        입력값의 개수가 정해져 있지 않을 때(String[] args)

메서드 오버로딩(Overloading)
    같은 이름의 메서드로 다양한 입력값을 처리
    printVar(int a)
    printVar(String a)
    printVar(double[] a)
        - Java는 이런 식으로 같은 이름의 여러 메서드를
          만들 수 있습니다 => 사용자의 편의성을 위함

    cf) C언어
        printVar1(int a)
        printVar2(String a)
        printVar3(double[] a)
            - 사용자가 변수에 따라 다른 함수명을
              모두 알고 있어야 사용 가능

    - 메서드 오버라이딩(Overriding)과 비교됨

this와 초기화 블럭
(1) this
    - 객체 본인을 일컫는 말
    - 예) 표에 커서를 올릴 때마다 그 줄은 빨간색
          event(this){
              this.backgroundcolor = RED;
          }
(2) 초기화 블럭
    2가지의 타입이 있음
    static {       }
    {              }

 

☆ Code

import util.MyUtil;

public class ClassTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub\
		MyUtil.p(MyUtil.NEGATIVE + MyUtil.MAGENTA + "클래스 테스트" + MyUtil.END);
		
		Car car1 = new Car();
		MyUtil.p(car1.toString());
		
		Car car2 = new Car("Black", "MyTrip", "Luxury");
		MyUtil.p(car2.toString());
	}

}

class Car {
	String color;
	String name;
	String type;
	
	Car(){
		color = "미정";
		name = "비밀";
		type = "완전기본형";
		MyUtil.p("Car() Called");
	}
	
	Car(String color, String name, String type){
		this.color = color;
		this.name = name;
		this.type = type;
		MyUtil.p("Car(...) Called");
	}
	
	public String toString() {
		return "제 색상은 " + color + ", 이름은 " + name + ", 타입은 " + type;
	}
	
	// Code Block
	// 생성자(Constructor)가 여러 개가 있는데, 공통적으로 할 일이 있을 경우
	static {
		MyUtil.p("static {  } Called");
	}
	
	{
		MyUtil.p("{  } Called");
	}
}