※ call by value : 값이 그대로 복붙, 자바의 인자값은 무조건 이거
call by reference : 참조값이 복붙
※ 객체는 메서드의 선언부만 가져옴
현재사용중인 객체 = this.
멤버변수 앞에 this.이 생략된것
//제공자코드
/**
* TV용 클래스이다
* @author 작성자
* @version 1.0
*/
class TV{
// boolean power = false;
boolean power; // 값을 주지 않아도 자동초기화가 false
int channel;
int volume;
/**
* 전원을 켠다
*/
void powerOn(){
power = true;
}
/**
* 전원상태를 반환한다
* @return 전원이 켜진 상태면 true반환, 꺼진 상태면 false를 반환한다
*/
boolean isPower(){
return power;
}
/**
* 채널을 설정한다
* @param i 설정할 채널값
* @를 어노테이션이라하는데 param 어노테이션을 써서 매개변수에 대한 설명을 작성하면 된다
*/
void setChannel(int i){
channel = i;
}
/**
* 현재채널값을 반환한다
* @return 현재채널값
*/
int getChannel(){
return channel;
}
/**
* 채널값을 1증가한다
*/
void channelUp() {
channel++;
}
/**
* 음량을 1증가한다
*/
void volumeUp() {
volume++;
}
/**
* 음량을 1감소한다
* 단, 최소음량은 0이다
*/
void volumeDown() {
if(volume == 0) {
return; // void일때 return; 메서드 끝낼 수 있음
}
volume--;
}
/**
* 현재 음량을 반환한다
* @return 음량
*/
int getVolume() {
return volume;
}
}
//사용자코드 : 실행용도의 클래스
public class WatchTV {
public static void main(String[] args) {
TV tv; //참조형지역변수 선언
tv = new TV(); // 객체생성 or 초기화필요
System.out.println(tv.power); //false
System.out.println(tv.channel); // 0
System.out.println(tv.volume); // 0
tv.powerOn();
boolean flag = tv.isPower();
if(flag) { // (flag==ture) 와 같은 뜻
System.out.println("전원이 켜졌습니다");
tv.setChannel(11); // 채널설정한다
int ch = tv.getChannel(); // 현재 채널을 반환한다
System.out.println("현재 채널은 " + ch); //11
tv.channelUp(); //채널을 1 증가한다
System.out.println("현재 채널은 " + tv.getChannel()); //12
// 음량을 20증가
for(int i = 0; i<20; i++) {
tv.volumeUp();
}
// 음량을 50감소
for(int i = 0; i<50; i++) {
tv.volumeDown();
}
System.out.println("현재 음량은 " + tv.getVolume()); //0
} else {
System.out.println("전원이 꺼졌습니다");
}
TV tv1 = new TV();
tv1.powerOn(); // 위로 그냥 올라가는게 아님, 현재 사용중인 객체의 power 변수인거임
}
}
//제공자코드
class Employee{
String no;
String name;
int salary;
void setNo(String a) {
no = a;
}
void setName(String b) {
name = b;
}
void setSalary(int c) {
salary = c;
}
String getNo() {
return no;
}
String getName() {
return name;
}
int getSalary() {
return salary;
}
void print() {
System.out.println("사번:"+no + ", 사원명:" + name + ", 기본급:" + salary);
}
}
//사용자코드
public class HR {
public static void main(String[] args) {
Employee e1 = new Employee();
String no = e1.no;
System.out.println(e1.no); //null
e1.setNo("2301"); //사번설정한다
e1.setName("오문정"); //사원명설정한다
e1.setSalary(1000);//기본급설정한다
System.out.println("사원의 사번-" + e1.getNo() + ", 사원명-" + e1.getName() + ", 기본급-" + e1.getSalary());
e1.print(); //"사번:사번값, 사원명:사원명값, 기본급:기본급값" 이 출력되도록 한다
Employee eTemp;
//eTemp = null;
//eTemp = new Employee();
eTemp = e1;
System.out.println( e1 == eTemp ); //true
eTemp.setSalary(2000);
System.out.println( e1.getSalary() );
eTemp = null;
System.out.println(eTemp); //null
System.out.println(e1.getSalary()); //2000
//System.out.println(eTemp.getSalary());//NullPointerException발생후 프로그램 종료됨
Employee[] employees; //선언
//최대20명의 사원이 저장될 수 있는 배열 생성
employees = new Employee[20];
employees[0] = e1;
for(int i=2; i<=5; i++) {
Employee e2 = new Employee();
e2.setNo("230"+i); e2.setName("name"+i); e2.setSalary(1000);
employees[i-1] = e2;
}
for(int i=0; i<5; i++) {
//for(int i=0; i<employees.length; i++) { //NullPointerException발생
employees[i].print();
}
System.out.println("THE END");
}
}
'언어 > Java' 카테고리의 다른 글
this (0) | 2023.07.28 |
---|---|
문서용 주석 document comment (0) | 2023.07.28 |
클래스 (0) | 2023.07.28 |
이클립스 새 프로젝트 만들기 (0) | 2023.07.27 |
절차지향 VS 객체 지향 (0) | 2023.07.27 |