Java : 필드와 메서드

커비·2024년 11월 13일
0

Java

목록 보기
38/55

필드

필드는 객체의 데이터를 저장하는 역할을 한다.

  • 객체의 필드는 크게 고유한 데이터, 상태 데이터, 객체 데이터로 분류할 수 있음
  • 그래서 바로 이전에 하위 객체들을 따로 만들었음
  • 한 객체에서 하위 객체들을 가지고 있을 수 있음

필드 타입별 기본 값

'필드를 사용한다' 라는 의미

: 필드의 값을 변경하거나 읽는 것을 의미함
: 클래스는 설계도일 뿐 실제로 필드의 데이터를 가지고 있는 것은 객체임
: 객체를 생성한 후에 필드를 사용할 수 있음

❤️‍🔥 클래스는 실체가 아닌 설계도 라는 것을 항상 알고 있어야 함


외부 접근과 내부 접근

외부 접근

Car car = new Car();
  • 이렇게 객체를 생성했다면 우리는 참조변수 car를 이용하여 외부에서 객체 내부의 필드에 접근하여 사용할 수 있음
  • 이 때 객체의 내부 필드에 접근하는 방법은 도트. 연산자를 사용하면 됨
car.color = "blue";

내부 접근

  • 도트 연산자를 사용하여 외부에서 객체 내부에 접근할 수 있을 뿐만 아니라 객체 내부 메서드에서도 내부 필드에 접근할 수 있음
double brakePedal() {
	speed = 0;
    return speed;
}
  • 이처럼 brakePedal() 메서드 내부에서 객체의 필드 speed를 바로 호출해서 사용할 수 있음

메서드

메서드 선언

리턴타입 메서드명(매개변수, ...){
	실행할 코드 작성
}

리턴타입이 void가 아닌 경우에는 반드시 return값이 필요하기 때문에 return문을 작성해야 한다.

  • 리턴 타입
double brakePedal(){} // double 타입 반환
char changeGear(char type){} // char 타입 반환
boolean onOffLights(){} // boolean 타입 반환
void horn() {} // 반환할 값 없음

: 리턴 타입이란 메서드가 실행된 후 호출을 한 곳으로 값을 반환할 때 해당 값의 타입을 의미함

return 리턴타입의 반환값;

: 주의할 점은 메서드에 리턴타입을 선언하여 반환할 값이 있다면 반드시 return문으로 해당하는 리턴타입의 반환값을 지정해야함

  • 반환할 값이 없을 때는 리턴타입에 void를 작성해야 함
    : 반환값이 없음으로 return문을 반드시 지정할 필요는 없음
    : 메서드는 실행할 때 return문을 만나면 그대로 종료하게 되는데 void 타입일 때 return; 이렇게 return문을 사용하여 원하는 지점에서 메서드를 종료할 수도 있다. (= void여도 리턴할 수 있는 경우임)

매개변수

double gasPedal(double kmh, char, type){
	speed = kmh;
    return speed;
}
  • 매개변수는 메서드를 호출할 때 메서드로 전달하려는 값(매개체가 되는 변수)을 받기 위해 사용되는 변수
  • 위 gasPedal(double kmh, char type) 메서드의 매개변수는 double 타입의 kmh, char 타입의 type 이다.
    : gasPeadal(100, 'D')
    : 해당 매개 변수에 값을 전달하기 위해서는 순서타입에 맞춰 값을 넣어주면 됨
  • 전달하려는 값이 없다면 생략 가능
  • 가변길이의 매개변수도 선언 가능
void carSpeeds(double...speeds){
	for (double v : speeds){
    	system.out.println("v = " + v);
    }
}
  • double...speeds(...speeds = 가변길이) 이렇게 ...를 사용하면 아래처럼 매개값을 ,로 구분하여 개수 상관없이 전달 가능함
    - carSpeeds(100, 80);
    - carSpeeds(110, 120, 150);

메서드 호출 방법

메서드를 호출한다.

: 메서드명()

메서드의 블록 내부에 작성된 코드를 실행한다는 의미

  • 필드와 마찬가지로 클래스의 메서드를 정의하여 선언했다고 해서 바로 사용할 수 있는 것은 아님
  • 클래스는 설계도일 뿐 메서드는 객체의 행위를 정의한 것
  • 따라서 객체를 생성한 후에 메서드를 사용할 수 있음

메서드의 외부 접근과 내부 접근

외부 접근

Car car = new car();

  • 이렇게 객체를 생성했다면 우리는 참조변수 car를 이용하여 외부에서 객체 내부의 메서드에 접근하여 호출할 수 있음
  • 이때 객체의 내부 메서드에 접근하는 방법은 도트(.)연산자를 사용하면 됨
    car.brakePedal();
  • 또한 메서드가 매개변수를 가지고 있다면 반드시 호출할 때 매개변수의 순서와 타입에 맞게 매개값을 넣어줘야 함
    car.gasPedal(100, 'D')

내부 접근

  • 도트 연산자를 사용하여 외부에서 객체 내부에 접근할 수 있을 뿐만 아니라 객체의 내부 메서드 에서도 내부 메서드에 접근하여 호출할 수 있음
double gasPedal(double kmh, char type){
	changeGear(type);
    speed = kmh;
    return speed;
}
  • 이처럼 gasPedal(double kmh, char type)메서드 내부에서 해당 객체의 changeGear(type); 메서드를 호출할 수 있음

반환값 저장

  • 메서드의 리턴타입을 선언하여 반환할 값이 있다면 변수를 사용하여 받아줄 수 있음
    ❤️‍🔥 : 반드시 리턴타입과 변수의 타입이 동일하거나 자동 타입 변환될 수 있어야 함
double speed = car.gasPedal(100, 'D');
  • double 타입의 변수 speed를 사용하여 double gasPedal(double kmh, char type) 메서드의 double 타입의 반환값을 받아 저장할 수 있음

예시 코드

  • 1차 코드
ar[] carArray = new Car[3];
        Car Caynne = new Car();
        // changeGear로 필드 세팅(저장)
        Caynne.changeGear('P');
        carArray[0] = Caynne;

        Car Gv80 = new Car();
        Gv80.changeGear('N');
        carArray[1] = Gv80;

        Car E400 = new Car();
        E400.changeGear('D');
        carArray[2] = E400;

        for(Car car : carArray) {
            System.out.println("car.gear = " + car.gear);
        }
  • 2차 코드
Car car = new Car(); // 객체 생성

        // 초기값 기본 값 확인 : 초기값을 준 것은 그 값이 들어가고 아닌 값은 default value가 set
        System.out.println("car.model = " + car.model);
        System.out.println("car.model = " + car.color);
        System.out.println();

        System.out.println("car.speed = " + car.speed);
        System.out.println("car.gear = " + car.gear);
        System.out.println("car.lights = " + car.lights);
        System.out.println();

        System.out.println("car.tire = " + car.tire);  // 참조형 변수 주소값 할당
        System.out.println("car.door = " + car.door);
        System.out.println();

        // 필드 사용 : 읽고 수정하는 것을 포함
        car.color = "blue";  // 필드 color를 blue로 저장
        car.speed = 100;
        car.lights = false;

        System.out.println("car.color = " + car.color);
        System.out.println("car.speed = " + car.speed);
        System.out.println("car.lights = " + car.lights);
  • 3차 코드
public static void main(String[] args) {
        Car car = new Car();

        // 메서드 호출 및 반환값을 저장
        double speed = car.gasPedal(100, 'D');
        System.out.println("speed = " + speed);

        boolean lights = car.onOffLights();
        System.out.println("lights = " + lights);

        System.out.println();
        System.out.println("car.gear = " + car.gear);

        System.out.println();
        car.carSpeeds(100, 80);
        System.out.println();
        car.carSpeeds(110, 120, 150);
    }

package week03;


public class Car {
    // < 필드영역 >

    // 1) 고유 데이터 영역
    // 자동차 회사
    String company;

    // 자동차 모델
    String model = "Gv80";

    // 자동차 색상
    String color;

    // 자동차 가격
    double price;

    // 2) 상태 데이터 영역
    // 자동차 속도, km/h
    double speed;

    // 기어 상태 (P, R, N, D)
    char gear;

    // 자동차 라이트 (true : 불 켜짐, false : 불 꺼짐)
    boolean lights = true;

    // 3) 객체 데이터 영역
    Tire tire = new Tire();
    Door door;
    Handle handle;

    // < 생성자 영역 >
    // 생성자 : 처음 객체가 생성될 때(instance화)
    // : 어떤 로직을 수행해야하며, 어떤 값이 필수로 들어와야 하는지 정의!
    public Car (){
        // logic / 기본 생성자(아무것도 없는 형태) : 생략이 가능

        // 생성자 호출 및 객체 생성 여부 확인
        // System.out.println("생성자 호출, 객체 생성");
    }


    // < 메서드 영역 >

    // gasPedal
    // input : kmh
    // output : speed
    double gasPedal(double kmh, char type){
        // 가속도 페달을 밟으면 자동으로 기어가 변한다
        changeGear(type);
        speed = kmh;
        return speed;
    }


    // brakePedal
    // input : X
    // output : speed
    double brakePedal(){
        speed = 0;
        return speed;
    }

    // changeGear
    // input : gear(char type)
    // output : gear
    char changeGear(char type){
        gear = type;
        return gear;
    }

    // onOffLight
    // input : X
    // output : Lights(boolean)
    boolean onOffLights(){
        lights = !lights;
        return lights;
    }

    // horn
    // input : X
    // output : X
    void horn(){
        System.out.println("빵빵!");
    }

    // 자동차의 속도.. 가변길이 메서드
    void carSpeeds(double ... speeds){
        for(double v : speeds){
            System.out.println("v = " + v);
        }
    }
}
profile
전공은 컴퓨터공학, 복수전공은 해킹보안학, 직장은 방학(파워 구직중)

0개의 댓글