본문 바로가기

자바

[자바기초요약3] 참조형 변수 선언

# 변수의 초기값
정수형  0
실수형  0.0
문자형  공백
논리형  false
참조형(클래스형)  null(주소가 없다)
참조형(배열형)   null
 

# 변수의 종류
1 멤버변수 : 메서드의 블럭({})바깥쪽에 선언되는 변수
2 지역변수 : 메서드의 블럭({})안쪽에 선언되는 변수
3 매개변수 : 메서드의 괄호(())안쪽에 선언되는 변수


# 클래스형의 참조형변수 선언하기
 
 클래스명  주소=new 클래스명();
 주소.멤버변수명
[ex]
class A{
 int a=10;
}
class B{
 public static void main(String args[]){
  System.out.println(a);
 }
}

 
[ex]
class A{
 int a=10;
}

class B{
 public static void main(String args[]){
  A address=new A();
  System.out.println(address.a);
 }
}


[ex]
class A{
 int a=100; // 멤버변수
 void m1(){
  int b=200; // 지역변수
 }
 void m2(int d){  // 매개변수
  int c=300; // 지역변수
 }
}

class B{
 public static void main(String args[]){
  A o=new A();
  System.out.println(o.a);     // 접근가능
  System.out.println(o.m1());  // 에러 리턴형이 void는 Sys안에 넣을수 없음 
  System.out.println(o.b);     // 에러 지역변수라서
  System.out.println(o.c);     //    "
  System.out.println(o.d);     // 에러 매개변수는 접근가능한게 아님 
 }
}

 
 
[ex] 클래스Dog,Cat의 변수값을 출력하는 소스코드를 작성하시오.
class A{
 public static void main(String args[]){
  //here
 }
}
class Dog{
 String type="개";
}
class Cat{
 String type="고양이";
}

 
[ex] 초기값 알아보기
class A{
 int a;
 double b;
 char c;
 boolean d;

 int[] e;                       //참조형(배열형)
 B f;                            //참조형(클래스형) - 클래스이름 변수명;   
}

class B{
 public static void main(String args[]){

  A a=new A();

  System.out.println(a.a);     //     0
  System.out.println(a.b);     //     0.0
  System.out.println(a.c);     //     공백
  System.out.println(a.d);     //     false
  System.out.println(a.e);     //     null
  System.out.println(a.f);     //     null

 }
}

[ex]
class Box{
 String color="red";
 int width=100;
 int height=200;
}
class B{
 public static void main(String args[]){
  //here
 }
}

[an]
  Box box=new Box();
  System.out.println(box.color);
  System.out.println(box.width);
  System.out.println(box.height);
 
 
# 메서드선언하기
1. 반환형이 없는 메서드
2. 반환형이 있는 메서드
class 클래스명{
      void 메서드명(){}  // 반환형이 없는 메서드
      자료형 메서드명(){}  // 반환형이 있는 메서드
}
 자료형종류  -   int char double boolean    int[] char[] double[] boolean[] 클래스명   


# 메서드호출하기
     주소.메서드명();

[ex] 실행결과는?
class A{
 void a(){
       System.out.println(1);
 }
 void b(){
       System.out.println(2);
 }
 void c(){
       System.out.println(3);
 }
}
class B{
 public static void main(String args[]){

  A o=new A();
  o.a();
  System.out.println("aa");
  o.b();
  o.c();
  o.b();
 }
}
[an]

1
aa
2
3
2  

 
[ex] 변수type을 출력하고 메서드sound를 호출하는 소스코드를 작성하시오.
class Dog{
 String type="개";
 void sound(){
  System.out.println("멍멍");
 }
}
class B{
 public static void main(String args[]){

  //here
 }
}

[an]
  Dog dog=new Dog();
  System.out.println(dog.type);
  dog.sound();
 
 
# 매개변수가 있는 메서드 선언하기
[ex]
class A{
 void m1(int a){
  System.out.println(a);
 }
 void m2(int a, boolean b){
  System.out.println(a+","+b);
 }
 void m3(String a){
  System.out.println(a);
 }
}
class B{
 public static void main(String args[]){

  A o=new A();
  o.m1(0);
  o.m2(0,true);
  o.m3("aaa");
 }
}

 
[ex] 메서드setColor와 printColor를 호출하는 소스코드를 작성하시오.
class Car{
 String color;
 void setColor(String c){
  color=c;
 }
 void printColor(){
  System.out.println(color); // red
 }
}
class B{
 public static void main(String args[]){

  //here
 }
}

[an]
    Car car = new Car();
    car.setColor("blue");
    car.printColor();
#  반환형이 있는 메서드
[ex]
class A{

 void a(){
  System.out.println(1);
 }
 int b(){
  System.out.println(2);
  return 100;
 }
 String c(){
  System.out.println(3);
  return "aaa";
 }

}
class B{
 public static void main(String args[]){

  A o=new A();
  o.a();
  int d=o.b();
  String e=o.c();
  System.out.println(d);
  System.out.println(e);
 }
}

 
 
[ex]  
class A{

 void a(){
  System.out.println(1);
 }
 int b(){
  System.out.println(2);
  return 100;
 }
 String c(){
  System.out.println(3);
  return "aaa";
 }

}
class B{
 public static void main(String args[]){

  A o=new A();
  System.out.println(o.a()); // 컴파일에러 바로 Sys없이 o.a() 해야함 
  System.out.println(o.b());
  System.out.println(o.c());
 }
}

 
[ex] 
class A{

 void a(){
  System.out.println(1);
 }
 int b(){
  System.out.println(2);
  return 100;
 }
 String c(){
  System.out.println(3);
  return "aaa";
 }

}
class B{
 public static void main(String args[]){

  A o=new A();
  int v1=o.a(); // 컴파일에러   타입 오류 
  int v2=o.b();
  String v3=o.c();
 }
}


 
[ex] 실행결과는?
class Box{
 int width;

 void setWidth(int w){
  width=w;
 }
 int getWidth(){
  return width;
 }
}
class B{
 public static void main(String args[]){

  Box box=new Box();
  box.setWidth(100);
  int w=box.getWidth();
  System.out.println(w);
 }
}

 
[ex]
class A{
 int a=100;    // 멤버변수
 void b(){    // 반환형이 없는 메서드
  System.out.println(200);
 }
 int c(){    // 반환형이 있는 메서드
  int d=300;   // 지역변수
  return d;
 }
 void e(int f){    // 매개변수
  System.out.println(f);
 }
}
class B{
 public static void main(String args[]){
  A o=new A();
  System.out.println(o.a);

  int n=o.a;
  System.out.println(n);
  o.b();
  int n2=o.c();
  System.out.println(n2);
 }
}



[hw] 과제를 해오세요~
class Cal{

 int[] operate(int a, int b){
  //here
 }
}
class A{
 public static void main(String args[]){
  Cal cal=new Cal();
  //here

  System.out.println(array[0]); // 15
  System.out.println(array[1]); // 5
  System.out.println(array[2]); // 50
  System.out.println(array[3]); // 2

 }
}

[an]
class Cal{

 int[] operate(int a, int b){
     int[] array= new int[4];
    array[0] = a+b;
    array[1] = a-b;
    array[2] = a*b;
    array[3] = a/b;
    return array;
 }
}
class A{
 public static void main(String args[]){
  Cal cal=new Cal();
  int[] array = cal.operate(10,5);

  System.out.println(array[0]); // 15
  System.out.println(array[1]); // 5
  System.out.println(array[2]); // 50
  System.out.println(array[3]); // 2

 }
}



# 메서드 선언과 호출
[ex]
class A{
 public static void main(String args[]){
  B o=new B();
  o.m1(100);  // 메서드호출
  o.m2("aa",false);
 }
}
class B{
 void m1(int a){   // 메서드선언
  System.out.println(a);
 }
 void m2(String a,boolean b){
  System.out.println(a+","+b);
 }
}

[ex] 실행결과는?
class A{
 public static void main(String args[]){
  B o=new B();
  int n=o.m1();
  System.out.println(n);
  String s=o.m2("aa",false);
  System.out.println(s);
 }
}
class B{
 int m1(){
  return 100;
 }
 String m2(String a, boolean b){
  return a+","+b;
 }
}


[ex] 변수 v1~v6의 값을 할당하시오.
class A{
 public static void main(String args[]){
  int v1;
  double v2;
  char v3;
  boolean v4;

  int[] v5;
  B v6;

  System.out.println(v1);
  System.out.println(v2);
  System.out.println(v3);
  System.out.println(v4);
  System.out.println(v5);
  System.out.println(v6);
 }
}

class B{
 int a=100;
}

[an]
  int v1=100;
  double v2=0.5;
  char v3='A';
  boolean v4=false;
  
  //int[] v5=new int[3];
  int[] v5={10,20,30,40,50};                  //v5 : 주소값(배열형)
  B v6=new B();                                //v6 : 주소값(클래스형)  
 

[ex] 클래스B의 메서드 b,c를 호출하는 소스코드를 작성하시오.
class A{
 public static void main(String args[]){
  B o=new B();
  o.a(100);
  //here
 }
}
class B{
 void a(int v){
  System.out.println(v); // 100
 }
 void b(boolean[] v){
  System.out.println(v); // [Boolean@주소
 }
 void c(C v){
  System.out.println(v); // C@주소
 }
}
class C{
}

[an]
  o.a(100);                                  
  o.b(new boolean[3]);
  o.c(new C());
 
# 멤버변수의 초기값
 정수형 0  실수형  0.0  문자형 공백  논리형 false 
 참조형 null
 멤버변수는 아래와 같은 초기값을 가지고 있지만 
 지역변수는 초기값을 가지고 있지 않다.

[ex]
class A{
 public static void main(String args[]){
  int a;
  System.out.println(a); // 컴파일에러발생
 }
}


[ex]     //밑에 굵은것 4가지 비교
class A{
 public static void main(String args[]){
  B o=new B();
  C c=o.a;
  System.out.println(c.b);
 }
}
class B{
 C a=new C();
}
class C{
 int b=100;
}
//100

class A{
 public static void main(String args[]){
  B o=new B();
  C c=o.a();
  System.out.println(c.b);
 }
}
class B{
 C a(){
  return new C();
 }
}
class C{
 int b=100;
}
 //100

class A{
 public static void main(String args[]){
  B o=new B();
  o.a(new C());
 }
}
class B{
 void a(C obj){
  C address=new C();
  System.out.println(address.b);
 }
}
class C{
 int b=100;
}
//100

class A{
 public static void main(String args[]){
  B o=new B();
  o.a(new C());
 }
}
class B{
 void a(C obj){
  System.out.println(obj.b);
 }
}
class C{
 int b=100;
}
 //100
 
 


# this란

[ex]
class A{
 int a;                                        

 void b(int a){
  a=a;                                         // a=this.a;                            "
 }
}
class B{
 public static void main(String args[]){
  A o=new A();
  o.b(100);
  System.out.println(o.a); // 100
 }
}

 
[ex]
class A{
 public static void main(String args[]){
  B o1=new B();  o1.a=200;                 // o1,o2,o3 에 저장된 주소값은 다 다름
  B o2=new B();  o2.a=300;
  B o3=new B();
  System.out.println("o1:"+o1);
  System.out.println("o2:"+o2);
  System.out.println("o3:"+o3);
  o1.b(o2);
 }
}
class B{
 int a=100;
 void b(B bobj){
  System.out.println(bobj.a); // 300
  System.out.println(this.a); // 200
 }
}

 
[ex]
class A{
 public static void main(String args[]){
  B o1=new B();  o1.a=200;
  B o2=new B();  o2.a=300;
  B o3=new B();
  System.out.println("o1:"+o1);
  System.out.println("o2:"+o2);
  System.out.println("o3:"+o3);
  o2.b(o3);
 }
}
class B{
 int a=100;
 void b(B bobj){
  System.out.println(bobj.a); // 100
  System.out.println(this.a); // 300
 }
}


 
[ex] 
class A{
 public static void main(String args[]){
  B o1=new B();  o1.a=200;
  B o2=new B();  o2.a=300;
  B o3=new B();
  System.out.println("o1:"+o1);
  System.out.println("o2:"+o2);
  System.out.println("o3:"+o3);

  o1.b(o3);
  System.out.println("o1:"+o1.a);
  System.out.println("o2:"+o2.a);
  System.out.println("o3:"+o3.a);
 }
}
class B{
 int a=100;
 void b(B c){
  System.out.println(c);
  System.out.println(this);
  c.a=400;
  this.a=500;
 }
}

 
[ex]
class A{
 public static void main(String args[]){
  Car car1=new Car();
  Car car2=new Car();
  Car car3=new Car();
  car1.color="gray";
  car2.color="green";
  car3.color="gold";
  car1.changeColor(car2);
  System.out.println(car1.color); // red
  System.out.println(car2.color); // pink
  System.out.println(car3.color); // gold
 }
}
class Car{
 String color;
 void changeColor(Car car4){
  //System.out.println(this.color);  gray
  //System.out.println(car4.color);   green
  this.color="red";
  car4.color="pink";
 }
}

  
[ex]
class 붕어빵 {
       String 재료;
       void 재료넣기(String 재료) {
              this.재료 = 재료;
       }
       void 재료바꾸기() {
              재료 = "김치";
       }
}
class A {
       public static void main(String args[]) {
              붕어빵 붕어빵1 = new 붕어빵();
              붕어빵 붕어빵2 = new 붕어빵();
              붕어빵1.재료넣기("팥");
              붕어빵2.재료넣기("슈크림");
              System.out.println(붕어빵1.재료); // 팥
              System.out.println(붕어빵2.재료); // 슈크림
              붕어빵2.재료바꾸기();
              System.out.println(붕어빵1.재료); // 팥
              System.out.println(붕어빵2.재료); // 김치
       }
}

 
 
 
[ex] 아래와 같이 출력될 수 있도록 setSize, 
 setColor메서드를 here부분에 호출하시오.
class Box {
       int width, height;
       String color;

       void setSize(int w, int h) {
              width = w;
              height = h;
       }

       void setColor(String color) {
              this.color = color;
       }

       void printInfo() {
              System.out.println("width:" + width);
              System.out.println("height:" + height);
              System.out.println("color:" + color);
       }
}

class B {
       public static void main(String args[]) {
              Box box1 = new Box();
              Box box2 = new Box();
              // here
              box1.printInfo();
              // width:10
              // height:20
              // color:red
              box2.printInfo();
              // width:30
              // height:40
              // color:green
       }
}

[an]
  box1.setSize(10,20);
  box2.setSize(30,40);
  box1.setColor("red");
  box2.setColor("green");
  box1.printInfo();
  box2.printInfo();  
  
[ex] 아래와 같이 출력될 수 있도록 here부분의 소스코드를 완성하시오.
class A {
       public static void main(String args[]) {
              Car car1 = new Car();
              Car car2 = new Car();
              Car car3 = new Car();
              car1.color = "gray";
              car2.color = "green";
              car3.color = "gold";
              // here
              System.out.println(cars[2].color); // gold
       }
}
class Car {
       String color;
}

[an] Car[] cars={car1,car2,car3};       //car1,2,3에 저장된주소값은 자료형이
                                                       클래스형이므로 배열을 선언시 클래스형을 선언해준다 
                                                   //배열안 car1,2,3도 자료형이 Car라는 클래스형이므로
                                                       배열선언시 Car이라는 클래스형 선언

[ex] 변수array1, array2, array3의 자료형은?
class A{
 public static void main(String args[]){
  Car car1=new Car();
  Car car2=new Car();
  Car car3=new Car();
  car1.color="gray"; car1.speed=10;
  car2.color="green"; car2.speed=20;
  car3.color="gold"; car3.speed=30;
  //here array1={car1,car2,car3};
  //here array2={car1.color,car2.color,car3.color};
  //here array3={car1.speed,car2.speed,car3.speed};
 }
}
class Car{
 String color;
 int speed;
}

[an]  Car[] array1={car1,car2,car3};
  String[] array2={car1.color,car2.color,car3.color};
  int[] array3={car1.speed,car2.speed,car3.speed};