Day 12

dokiru·2023년 2월 15일
0

학원

목록 보기
10/51

클래스

  • 인스턴스 (instance) : 클래스로부터 만들어진 각각의 객체들
  • 인스턴스 멤버: 인스턴스를 생성한 후 사용할 수 있는 필드와 메소드

ex.

public class Car {
	String model;
    int speed;
}

Car(String model){
	this.model = model;
}

void setSpeed(int speed) {
	this.speed = speed;
}



----
public class CarTest  {
	public static void main(String[] args){
    Car car1 = new Car("Kia");
    Car car2 = new Car("Porsche");
    //  car1과 car2는 서로 다른 인스턴스
    
    // car1의 인스턴스 멤버는 필드인 model, speed 그리고 메서드인 setSpeed이다.
    }
}
  • 객체 내부에서는 인스턴스 멤버에 접근하기 위해 this 사용
  • this는 주로 생성자와 메소드의 매개 변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자 할 때 사용한다.

Getter와 Setter 메소드

  • OOP에서는 메소드를 통해서 데이터를 변경하는 방법을 선호한다. 데이터는 외부에서 접근할 수 없도록 막고, 메소드를 통해 데이터에 접근하도록 유도
    1) 접근 제한자로 접근 자체를 막거나
    2) 값 유효성 기준에 맞는 것만 넣어라

  • 읽어오는 메서드 : get으로 시작

  • 값을 필드에 저장하는 메서드 : set으로 시작

ex.

public class Room {
	int deskCount; // 최대 20개까지
    int chairCount; // 100 단위
	int width; // 미터 단위
    
    int getWidth() { // getter
		return width;
    }
    
    int getWidthAsCM() {
    	return width * 100; // 저장된 값 필요한 형태로 바꿔서 리턴
    }
    
    void setDeskCount(int deskCount) { // setter
    	this.deckCount = deskCount;
    }
    
    void setChairCount (int chairCount) {
    	if (chairCount > 20) { // 20 초과면 20 출력
        	this.chairCount = 20;
        } else { // 그 외에는 입력된 수 출력
        	this.chairCount = chairCount;
        }
    }
}

정적 멤버와 static

  • 정적 멤버 : 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다. 클래스에 소속되어 있기 때문에 클래스 멤버라고도 한다.

-선언*기준
필드: 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드, 객체마다 가지고 있을 필요성이 없는 공용적인 데이터라면 정적 필드

메서드: 인스턴스 필드를 이용해서 실행해야 한다면 인스턴스 메소드, 사용하지 않는다면 정적 메소드로 선언

public class 클래스{
	 static 타입 필드;
     
     static 리턴타입 메소드 (매개변수선언, ...){
     }
}
  • 사용 : 인스턴스를 따로 만들 필요 없이 클래스 이름과 함께 도트 연산자로 접근한다.

ex.

public class ClassSample {

	String name; // 인스턴스 멤버 -> 객체 인스턴스에 관련된 멤버
	static String id; // 정적 static 멤버 -> 클래스에 소속된 멤버
	// static -> 객체 없이도 접근 가능
	
	ClassSample(String name, String id) {
		this.name = name;
		this.id = id;
	}
	
	void printLine() {
		System.out.println("---------------------");
	}
	
	static void printLineStatic() { // 정적 메소드
		System.out.println("static---------------------");
	}
}




public class ClassMain004 {

	public static void main(String[] args) { // 클래스에 고정
	ClassSample cs = new ClassSample("롱초", "3");
    cs.id = "4"; // 인스턴스에 접근해서 바꿔도 되고
    
    // 인스턴스 멤버 메소드
    cs.printLine();
    
    System.out.println(cs.id); // 4
    
    // 클래스와 도트연산자로 접근할수도 있음
    ClassSample.id = "static id입니다!!";
    
    System.out.println(cs.id); // static id입니다!!
    
    // 클래스로 정적 메소드 접근
    ClassSample.printLineStatic();
    }

}
  • 주의할 점 : 정적 메서드나 블록 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다. 또한 객체 자신의 참조인 this 키워드도 사용이 불가능하다.
    => 객체를 먼저 생성한 후 참조변수로 접근해야함

++)
1. 메소드 중간의 return 문을 만나면 메소드를 탈출한다.
2. return 타입과 실제 리턴하는 값 사이에서도 자동형변환이 된다.
ex. return 타입이 더블인데 0을 리턴하려는 경우 -> int가 double로 자동형변환 / 강제 형변환 해주려면 리턴 시에 형변환 타입을 붙여준다.

profile
안녕하세요!

0개의 댓글