본문 바로가기

Java/강의

여러 종류의 객체

여러 종류의 객체
패키지(Package)


패키지는 서로 연관된 여러 클래스를 모아서 하나의 디렉토리에 넣은 것으로,     

프로그램을 체계적으로 구성할 때 유용하게 사용된다. 



같은 이름의 클래스가 두 개의 패키지에 독립적으로 정의되었을 경우,    

두 클래스는 별개의 클래스이다. 



패키지의 이름은 클래스 이름에 포함된다. 

모든 클래스는 패키지에 포함되어 있다.

지금까지 작성된 패키지가 명시되지 않은 클라스는 자바 내에 디폴트 패키지에 속한다. 


패키지의 작성 


클래스를 패키지 내에 넣기 위해서는     

클래스가 정의된 화일의 첫 줄에 다음의 명령문을 삽입한다.        



package 패키지이름;   

package MyPackage;     

class Rectangle {         

// 클래스의 정의

}   



같은 패키지에 포함되는 모든 화일은 패키지의 이름과 같은 디렉토리에 저장한다. 

이 경우에는 MyPackage라는 디렉토리에 저장해야 한다.



패키지와 디렉토리 


클래스의 정의는 클래스의 이름과 같은 화일에 저장하고,    

패키지는 패키지의 이름과 같은 디렉토리에 저장한다. 

디렉토리가 서브디렉토리를 가지듯이, 패키지도 서브패키지를 가진다. 

패키지의 구성은  반드시 디렉토리의 구조와 일치해야 한다. 

예를 들면, 위에서 MyPackage에 속하는 모든 화일은 MyPackage 디렉토리에 저장된다. 

MyPackage 내의 클래스를 PackA와 PackB의 두 패키지 그룹으로 나눌 경우    

MyPackage 디렉토리는 하부에 PackA와 PackB라는 두 서브디렉토리를 가진다. 



ClassA를 PackA 패키지에 넣을 경우 클라스의 이름:  package MyPackage.PackA.ClassA;   



디렉토리 내의 클래스를 사용하기 위한 환경변수 CLASSPATH 설정.    

Windows 95의 경우 자바 표준패키지를 설정하는 방법은 autoexec.bat 화일에        

set CLASSPATH= .;C:\java\lib\classes.zip     



만약 C:\MyPackage 라는 패키지를 만들어 추가하려면 아래와 같이 설정한다.      

set CLASSPATH= .;C:\MyPackage;C:\java\lib\classes.zip 


set : 환경변수뜸.


접근 속성 (Access Attributes)

▶ 객체지향의 주요 특성인  추상자료형의 목적은 데이타 캡슐화이다. (데이터의 보호(숨김))
▶ 캡슐화란 외부에서 클래스의 정의에 명시해 놓은 인터페이스를 통해서만 
객체에 접근 캡슐화를 위해서 접근 속성을 이용하여 객체 내의 
인스턴스 변수나 메소드의 접근을 통제   

▶ 접근 속성 
· public - 어디서나 접근이 가능 (구조체는 기본적으로 다 public)
· private - 같은 클래스 내에서만 접근이 가능 
· protected - 같은 패키지 내의 클래스와 다른 패키지 내의 서브클래스에서만 접근 가능 
· 접근 속성이 명시되지 않은 경우에는 같은 패키지 내의 클래스에서만 접근이 가능하다.
패키지 내에서의 접근속성
패키지 간의 접근속성
▶ 객체지향 프로그램의 특성인 캡슐화를 위해서 접근속성을 명시하는 것이 좋다 
▶ 일반적으로 클래스 내의 모든 인스턴스 변수는 private으로 한다. 
▶ 외부에서 호출되는 것은 메소드는 public (외부로부터의 접근 통로 제공) 
▶ final로 선언된 인스턴스 변수가운데 외부에서 사용할 수 있는 경우는 public으로 한다.    
(Math 클래스에 있는 여러가지 유틸리티 메소드나 표준 데이타 값을 선언한 경우) 

▶ 접근 속성은 클래스에도 적용된다. 
▶ 클래스의 정의 앞에 접근 속성이 없을 경우는 같은 패키지 내의 클래스만이 접근 허용    
(다른 패키지의 클래스에서 import문을 통해서 사용하는 것을 허용치  않음)

▶ 다른 패키지의 클래스에서 사용하려면 예약어 class 앞에 접근 속성 public을 명시     
클래스는 접근 속성으로 private나 protected는 가질 수 없다. 
▶ 각 프로그램 화일은 여러 개의 클래스를 가질 수 있지만, public 클래스는 하나만 허용


this 객체
class a
{
   private:
      int a;
   public:
      void seta()
      {
         int a;
         this.a=3;
      }
}
a는 메소드(seta)의 a이고, 
this.a 는 클래스의 a이고 이것을 this 객체라고한다.



native method
*.obj 안에 있는 코드를 native code 라고함
자바가상머신 안에 있는 코드는 Byte code 라고함

자바 프로그램 내에 다른 프로그래밍 언어로 작성된 메소드를 
포함시킬 때 예약어 native을 사용한다. 
단점 : 자바의 장점인 호환성을 잃음.

JNI : 자바 네이티브 인터페이스 약어


어플리케이션 프로그램 객체

public class ApplicationClassA
{
  public static void main(String[] args)
  {
    int aLength =3;
    int aWidth = 5;
    int rectangleArea;
    ApplicationClassA z = new ApplicationClassA(); // 어플객체

    rectangleArea = z.area(aLength, aWidth);
    System.out.println("The area of rectangle is " + rectangleArea);
  }
  int area(int lengthint width)
  {
    return length*width;
  }
}
메세지를 ApplicationClassB 클래스의 객체 theApplication에게 보낸다. 
이와 같이 경우에 따라서 어플리케이션 객체를 생성해야 할 필요가 있다. 
이런 경우는  GUI 인터페이스의 이벤트 구동 프로그램에서 나타난다.  
애플릿 프로그램의 경우 웹 브라우져가 애플릿 객체를 생성하기 때문에 
프로그램 내에서 따로 객체를 생성하지 않아도 된다.   

위의 프로그램에서 어플리케이션 프로그램 객체를 생성하지 않고 
area() 메소드를 호출하려면, area() 메소드를 main() 메소드처럼 
static으로 정의하면 가능하다. 



'Java > 강의' 카테고리의 다른 글

String 클래스의 메소드  (0) 2011.02.14
String 클래스와 배열  (0) 2011.02.11
인스턴스 변수와 정적 변수(Static Variables)  (0) 2011.02.10
인수 전달 기법  (0) 2011.02.09
생성자(Class Constructors)  (0) 2011.02.08