관리 메뉴

드럼치는 프로그래머

[JAVA] 배열, 클래스(생성자 메서드), 클래스상속 본문

★─Programing/☆─JAVA

[JAVA] 배열, 클래스(생성자 메서드), 클래스상속

드럼치는한동이 2007. 10. 29. 11:37

1. 배열의 선언과 사용

  Java에서 사용하는 배열은 C에서 사용했던 것과 비슷하다.

  자료형[] 배열명 = new 자료형[];

  위와 같이 선언하게 된다. 위와 같이 선언하는 방법을 동적할당이라고 하며, 자바에서는 동적할당을 기본으로 한다. 동적할당은 일반적인 정적할당과 달리 여러 가지 장점을 가지는데 그 중 하나가 컴파일시에 주소가 결정되는 것이 아닌 실행시에 결정된다는 장점이다. 그로 인해 많은 잇점을 얻을 수 있다. 또한 배열은 여러 가지 유용한 기능을 보유하고 있는데 아래의 예를 보자

public class ObjectA{

  public static void main(String args[]){

    String[] A = new String[3];

      A[0) = "이순신“;

      A(1) =“김좌진”;

      A(2) = "박문수“;

      System.out.println("크기 : " +A.length);

      A.sort();

      for(int i=0;i<A.length;i++)

        System.out.println("배열 "+i+" : "+ A[i]);

  }

}   

    위에서보면 배열명.length라는 변수와 배열명.sort()라는 메서드가 나왔다. 앞에는 배열의 크기를 알려주는 것이고, 두 번째는 배열안에 있는 요소를 정렬시키는 메서드이다. 이 둘은 배열을 사용하면서 우용하게 사용될 것이다.



2. 클래스 선언

  객체지향 프로그래밍은 항상 클래스 정의로부터 시작된다. 클래스를 정의하게 되면 정의된 클래스는 보통 Ojbect형이라고 하며, 최상위 클래스는 Object 자료형으로부터 상속받게 된다.

public class ObjectA{

  public int i; //멤버 변수

  public int j; //멤버 변수

  public void add(){ //멤버 메서드

    int k=i+j;

    System.out.println("k="+k);

  }

}

위와 같이 클래스가 선언되었다. 이 클래스는 ObjectA라는 이름을 가지며, ObjectA라는 자료형이 되었다. 그럼 위와 같이 클래스를 선언한다고해서 바로 사용할 수 있을까? 절대 그렇지 않다. 위와 같이 클래스를 선언했다고 해서 메모리에 할당된 것이 아니기 때문이다. 클래스를 사용하기 위해서는 객체를 선언해야 한다. 객체의 선언은

클래스명 객체명 = new 클래스명();

  혹은

  클래스명 객체명 = null;

  이라고 기술하면 된다.

  그럼 new 키워드가 하는 일에 대해서 살펴보자. new 키워드가 하는 역할은 =을 기준으로 오른쪽의 클래스 크기만큼 메모리 어딘가에 공간을 생성한 후, 객체명에게 이 주소를 리턴시켜준다. 이렇게 함으로서 객체명으로 객체의 멤버에 접근이 가능하게 된다.

public class ObjectEx{

  public static void main(String args[]){

    ObjectA ob = new ObjectA();

    ob.i = 19;

    ob.j = 20;

    ob.add();

  }

}



3. 생성자 메서드

  그럼 위의 예에서 객체를 선언할 때 쓰이는 문장 맨 뒤를 보자.

  클래스명 객체명 = new 클래스명();

  뒤에 클래스명() 에 붙는 가로의 역할이 바로 생성자 메서드 호출이다. 위에서 new가 하는 역할은 공간 할당 후 주소 리턴이라고 했다. 그러나 한가지 역할을 더 수행하게 되는데, 이것이 바로 생성자의 호출이다. 생성자 메서드를 정의해보자.

public class Con{

  public int garo;

  public int sero;

  public Con(int garo, int sero){

      this.garo=garo;

      this.sero=sero;

  }

  public void width(){

      int wid=garo*sero;

      System.out.println("넓이 : "+wid);

  }

}

  생성자는 위의 예제중 Con()이라는 메서드이다. 생성자 메서드의 특징은 리턴형이 없으므로, 리턴을 할 수가 없다는 것과 메서드명이 클래스명과 같다. 생성자 메서드는 객체의 초기화를 위에 대부분 사용되며, 위에서 사용된 this 키워드는 Con 메서드를 호출한 객체를 의미한다.

public class ConEx{

  public static void main(String args[]){

      Con ob = new Con(10, 20);

      ob.width();

  }

}



4. 클래스 상속

  우리가 흔히 상속이라고 하면 부모의 속성을 그대로 물려받는 것을 의미한다. 객체지향 프로그래밍에서도 역시 상속은 같은 의미로 사용된다. 부모 클래스로부터 파생시킨(상속시킨) 자식 클래스는 부모 클래스의 특성을 그대로 물려받게 된다. 이 상속은 매우 중요한 개념중의 하나로, 잘 알아두기 바란다. 상속은 이미 누군가 만들어놓은 클래스를 부모 클래스로해서 물려받아 사용하기 때문에, 부모 클래스를 재사용한다는 장점과 함께 자식 클래스에서 필요한 부분은 추가로 정의하게 되기 때문에 부모 클래스에서의 확장성이 있다.

public class Base{

  public int garo;

  public int sero;

  public Base(int garo, int sero){

    this.garo=garo;

    this.sero=sero;

  }

  public void width(){

    int wid=garo*sero;

    System.out.println("넓이 : "+wid);

  }

}

  위와 같이 부모 클래스를 만들었다. 그럼 부모 클래스로부터 상속받는 자식 클래스를 정의해보자.

public class BaseEx extends Base{

  public static void main(String args[]){

    BaseEx ob = new BaseEx(10,20);

    ob.width();

  }

}


Comments