자바의 객체 생성 방법과 멤버 변수에 대해 알아봤어.

자바 객체의 생성 방법

자바에서 객체를 선언하는 방법은 아래와 같아.

클래스명 객체참조변수;

객체를 선언하면 아래와 같은 문장으로 실제 객체를 생성할 수 있어.

객체참조변수 = new 클래스명();

즉 객체를 생성하기 위해서는 객체를 머저 선언하고 생성해야 하는데 전체 문장은 아래와 같지.

클래스명 객체참조변수 = new 클래스명();

간단한 코드로 표현하면 아래처럼 나타낼 수 있어.

class Box {
  int width;
  int height;
  int depth;
}

class MyBox {
  ..
  Box myBox1;
  Box myBox2;
  myBox1 = new Box();
  myBox2 = new Box();

  //간소화
  //Box myBox1 = new Box();
  //Box myBox2 = new Box();
}

처음에 객체를 선언하는 것은 null 값을 가진 변수만을 의미하는데 객체를 생성하게 되면 객체에 대한 메모리가 할 당되고 객체참조변수는 객체에 대한 참조값을 가지게 되지. 아래의 이미지 처럼 말이야.

객체의 선언

객체의 생성

아래는 간단한 예제 코드야.

class Box {
  int width;
  int height;
  int depth;
}

class TwoBox {
  public static void main(String args[]) {
    Box myBox1 = new Box();
    Box myBox2 = new Box();
    int vol1, vol2;

    //첫번째 박스 객체 생성
    myBox1.width = 20;
    myBox1.height = 40;
    myBox1.depth = 15;

    //두번째 박스 객체 생성
    myBox2.width = 10;
    myBox2.height = 20;
    myBox2.depth = 30;

    vol1 = myBox1.width * myBox1.height * myBox1.depth;
    System.out.println("첫번째 박스의 크기는 " + vol1 + "입니다");

    vol2 = myBox2.width * myBox2.height * myBox2.depth;
    System.out.println("두번째 박스의 크기는 " + vol1 + "입니다");
  }
}

멤버 변수 선언

자바의 멤버 변수는 클래스내의 메소드 밖에서 선언된 모든 것을 의미하는데 객체가 가질 수 있는 속성들을 나타낸다고 생각하면 돼.

멤버 변수는 아래와 같이 구분할 수 있어.

멤버 변수는 아래와 같이 구성되는데 static는 클래스 변수를 의미하고 final은 종단 변수를 의미해. 만약 static이나 final이 붙지 않는다면 객체 참조 변수이거나 객체 속성 변수를 의미하는 거야.

[public/private/protected] [static/final] 변수형 변수명;

public, private, protected는 접근 한정자인데 클래스의 선언에서 소개했던 한정자과 같은 역할을 하는 문장이야.

객체 변수는 객체가 가질 수 있는 특성을 표현하는데 객체 속성 변수와 객체 참조 변수로 구분할 수 있어.

객체 속성 변수는 객체가 가질 수 있는 속성을 나타내는 값으로 기본 자료형의 값들로 구성돼.

객체 참조 변수 객체를 지정하는 변수로 자바에서는 기본 자료형을 제외한 모든 요소들을 객체로 취급해. 사용자는 객체를 생성한 다음 그 객체에 접근하기 위해 객체 참조 변수를 통하여 그 객체의 멤버들에 접근할 수 있어.

아래는 객체 속성 변수와 객체 참조 변수의 예제들이야.

class Box {
  //객체 속성 변수
  int width;
  int height;
  int depth;
}

class MyBox {
  //객체 속성 변수
  int vol;

  //객체 참조 변수
  Box mybox1;
  Box mybox2;
  String boxname;
  ...
  public static void main(String args[]) {
    mybox1 = new Box();
    mybox2 = new Box();
    ...
  }
}
//객체 변수 대입의 예
{
  ...
  int my_count1 = 100;
  //객체 속성변수 대입
  int my_count2 = my_count1;

  Box mybox1 = new Box();
  //객체 참조변수 대입
  Box mybox2 = mybox1;
}

객체 속성 변수는 변수의 값이 복사되어 전달되고 객체 참조 변수는 객체에 대한 주소가 복사되어 전달되기 때문에 결국 같은 객체를 가르키게 되지.

객체 속성 변수

객체 참조 변수

아래의 예제를 보면 조금 더 이해하기 쉬울꺼야.

class Fruit {
  //객체 속성 변수
  int apple = 5;
  int straw = 10;
  int grapes = 15;
}

class Buy {
  public static void main(String args[]) {
    int quantity1, quantity2;

    Fruit f1 = new Fruit();
    Fruit f2 = f1;
    quantity1 = f1.apple + f1.straw + f1.grapes;
    quantity2 = f2.apple + f2.straw + f2.grapes;

    System.out.println("객체 f1의 초기 과일 개수 " + quantity1 + "개");
    System.out.println("객체 f2의 초기 과일 개수 " + quantity2 + "개");

    f1.apple = 10;
    f2.straw = 20;
    f1.grapes = 30;
    quantity1 = f1.apple + f1.straw + f1.grapes;
    quantity2 = f2.apple + f2.straw + f2.grapes;
    System.out.println("객체 f1의 값 변동 후 개수 " + quantity1 + "개");
    System.out.println("객체 f2의 값 변동 후 개수 " + quantity2 + "개");
  }
}

클래스 변수

클래스 변수는 static 을 붙여서 선언하는데 전역 변수의 개념을 가지는 변수야.

클래스 변수의 용도는 아래와 같아.

  • 객체 참조 및 객체 속성 변수는 객체가 생성될 때마다 각 객체에 변수들이 생성되지만 클래스 변수는 클래스로 부터 생성된 객체들의 수와 상관없이 하나만 생성
  • 한 클래스로 부터 생성된 모든 객체들은 클래스 변수를 공유
  • 클래스 변수를 이용하여 객체들 사이의 통신에 사용하거나 객체들의 공통 속성을 표현
  • 객체 변수와는 달리 클래스 변수는 클래스 이름을 통하여 접근

아래는 클래스 변수의 예제들이야.

class Box {
  int width;
  int height;
  int depth;
  long idNum;
  //클래스 변수 선언
  static long boxID = 0;
  public Box() {
    //생성자가 수행될 때마다 클래스 변수의 값을 증가
    //Box 클래스로부터 생성되는 모든 객체의 idNum 값은 객체가 생성되는 순서에 따라 유일한 값을 가지게 됨
    idNum = boxID++;
  }
}
class Box {
  int width;
  int height;
  int depth;
  long idNum;
  static long boxID = 0;
  public Box() {
    idNum = boxID++;
  }
}

class StaticDemo {
  public static void main(String args[]) {
    Box mybox1 = new Box();
    Box mybox2 = new Box();
    Box mybox3 = new Box();
    Box mybox4 = new Box();
    System.out.println("mybox1의 id 번호 : " + mybox1.idNum);
    System.out.println("mybox2의 id 번호 : " + mybox2.idNum);
    System.out.println("mybox3의 id 번호 : " + mybox3.idNum);
    System.out.println("mybox4의 id 번호 : " + mybox4.idNum);
    System.out.println("전체 박스의 개수는 " + Box.boxID + "입니다.");
  }
}
public class StaticDemo1 {
  public static void main(String args[]) {
    int objectcount = Integer.parseInt(args[0]);
    //Instance 클래스 타입의 배열 객체 objectArray[] 생성
    Instance objectArray[] = new Instance[objectcount];
    for(int i=0; i<objectcount; i++) {
      System.out.println(Instance.count + "번째 객체 생성") ;
    }
    System.out.println("생성된 객체의 수는 " +  Instance.count + "개 입니다.");
  }
}

class Instance {
  static int count = 0;
  Instance() {
    count++;
  }
}

종단(final) 변수

예약어 final을 사용하여 종단변수를 지정할 수 있는데 종단 변수는 변할 수 없는 상수 값을 나타내기 때문에 관례상 대문자로 표기하는 것을 원칙으로 해.

final int MAX = 100;
final int MIN = 1;

클래스 변수와 객체 속성 변수에 접근하기 위해서는 아래와 같이 “.”을 사용해.

클래스 변수

클래스 이름.클래스 변수

객체 속성 변수

객체이름.객체속성변수

아래는 종단 변수를 사용하는 간단한 예제야.

class A {
  int aa;
  int bb;
  int cc;
  static int s = 0;
}

class ATest {
  public static void main(String args[]) {
    A obja = new A();
    obja.aa = 4;
    obja.bb = obja.aa * 2;
    obja.cc = A.s;
  }
}

Share This Post

Leave a Reply

Your email address will not be published. Required fields are marked *

Latest Post

  • Criss Cross Crossover Crunch Flutter Kicks Heel Touch Knees Up Crunch Legs Lower Plank Side Plank Superman Arms Up Crunch Aquaman Catch Dish Oblique Crunch
  • Businesses can survive by constantly generating revenue by selling goods or services. Companies that do not have sales or profit can not survive. So it
  • Amazon CEO Jeff Bezos sends letters to shareholders every year. This letter contains Amazon’s current achievements and future vision. He also enclose that the first
  • A middle-aged man came to Pastor Norman Vincent Peale one day to ask him for counseling. The dejected man told Pastor Norman Vincent Peale. “Pastor,
  • I have been working as an IT freelancer for over 10 years and have had a chance to work with various clients. Working freelance, I
  • CNBC analyzed the minutes of the Berkshire Hathaway shareholders’ meeting to find out why Warren Buffett could be an excellent investor. It is already known,
  • Good timing is like a good choice. So what is ‘good choice’? A good choice is to decide what you need to do first. That
  • We learned that in childhood we should brush our teeth immediately after eating rice. However, this is a common misconception in the days when common
  • In most cases, it is important for novice marketers to work efficiently by reducing the waste of work and increasing focus. He will not used
  • source: vornado.com The circulator is the abbreviated name for ‘air circulator’. The air circulator actually has a different purpose than the fan. Unlike a fan