새싹체험_java_1016
1016
메서드 :: 객체의 기능 역할
public void run();
public void walk();
소스파일의 이름은 public class 이름과 일치해야함
하나의 소스파일에는 하나의 public class 만 있어야 함
> 보통 하나의 소스파일에는 하나의 클래스만 작성하는 것이 좋음
// 클래스 안에 구성 멤버 :: 필드 생성자 메서드
// 필드란 객체의 속성을 나타냄
// class에 선언된 변수를 필드라고 함
class Person{
String name;
int age;
// 생성자 (객체를 생성할 때 초기화 역할)
// 생성자는 class 이름과 같은 이름이다
public Person() {};
}
Person person = new Person();
// class타입 class변수 = new 생성자;
필드 :: 클래스 전역에서 사용가능한 전역변수
지역변수 :: 해당 메서드 지역 내에서만 사용 가능한 지역변수
패키지 파일 :: 소스파일과 바이트 파일을 관리해주는 폴더
패키지 안에 패키지 폴더 만들 수 있음
// 필드 field : class에 선언된 변수(멤버변수)
// 위의 '필드'랑, '메소드에 선언된 변수'와는 틀리다
// class에 선언된 변수 > 전역변수/ method에 선언된 변수 > 지역변수
// 선언과 동시에 초기화하는 것은 가능하나
// 클래스 블록 안에서 선언과 초기화를 따로 할 수 없고 오직 멤버 선언만 해줌
public void study() {
String place = "도서관";
int time = 2;
// 지역변수는 메모리의 스택 영역에 저장됨
// 스택 영역은 메소드의 호출과 함께 할당(메모리 영역에 저장됨)되며
// 메소드의 호출이 완료되면 소멸됨(메모리 영역에서 사라짐)
System.out.println("공부 장소 : " + place );
System.out.println("공부 시간 : " + time );
}
public class Ex01 {
public static void main(String[] args) {
new Student().study(); // Student 클래스로 부터 객체 생성 후 멤버 메서드 호출
// 객체 사용 > 객체이름.필드
}
class Car {
String company = "현대자동차";
String model = "그랜져";
String color = "검정";
int maxSpeed = 250;
int speed;
}
public class Ex02 {
public static void main(String[] args) {
// car class 로 부터 car 객체 생성하기
// 생성된 객체 사용하기
Car car = new Car();
System.out.println(car.color);
System.out.println(car.company);
System.out.println(car.maxSpeed);
System.out.println(car.model);
System.out.println(car.speed);
}
}
class Car2{
String color;
int speed;
// 메서드를 통해서 필드의 값을 가져오고 세팅함
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
} // 자기 자신 객체의 참조 변수 this를 통해 필드 접근
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
public class Ex03 {
public static void main(String[] args) {
Car2 car2 = new Car2();
car2.color = "red";
car2.speed = 60;
System.out.println("색상은 :: " + car2.color);
System.out.println("스피드는 :: " + car2.speed);
car2.setColor("yellow");
System.out.println("변경된 색상은 :: " + car2.getColor());
}
}
OOP프로그래밍에서는 객체 필드를 직접적으로 사용하기 보다는 메서드를 통해서 사용함
> 외부에서 마음대로 필드를 변경할 경우 객체의 무결성이 깨질 수 있기 때문
이러한 문제를 막기 위해 외부에서 필드를 직접 접근할 수 없고 메서드를 통해서 필드에 접근하게 하는 것
매개변수와 this
매개변수 이름은 보통 초기화시킬 필드 이름과 동일한 이름을 사용함
메서드 안에서 매개변수의 우선순위가 높기 때문에 메서드 내부에서는 해당 필드에 접근x
이 경우 필드 앞에 'this.'를 붙이면 됨 >>> 'this.필드'는 this라는 참조 변수로 필드를 사용하는 것
getter/setter
>> 외부에서 필드 데이터를 읽을때도 메서드로 필드값을 검증한 후 필드값을 외부로 전달하면 됨
클래스를 선언할 때 필드를 private으로 선언하고 필드에 대한 setter/getter 메서드를 통해 필드를 사용함
private 접근제한자 :: 필드를 바로 접근하지 못하도록 하기 위함
> 메서드를 통해 값을 세팅하고 값을 얻는 방법 밖에 없음
// 필드 검증
public int getSpeed() {
if(this.speed < 50) {
setSpeed(50);
}
return speed;
}
public void setSpeed(int speed) {
if(speed > 200) {
return;
}
this.speed = speed;
}
// 필드 검증 후 확인
Car3 car3 = new Car3();
car3.setSpeed(233);
System.out.println(car3.getSpeed());