Kim-Baek 개발자 이야기

자바 기본 (13) - 가변인자, 패키지, import 본문

개발/java basic

자바 기본 (13) - 가변인자, 패키지, import

김백개발자 2020. 10. 4. 02:41
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다


※ class loading : 하드에 있는 자바파일을 cpu 가 빠르게 처리하기 위해 Main Memory 에 올리는 것(JVM이 처리)

※Heap 내부의 내용을 없애는 시점 : 더 이상 사용할 수 없을 때
 ex) new A( ) -> 값을 사용할 수 없다. 지정되지 않음!  : JVM 이 처리한다.

※ reference 타입은 메모리에 동일한 크기로 주소가 잡힌다 (4byte)
    primitive 타입은 각각 크기에 맞게 공간을 할당한다.

※ 메소드가 찾는 것은 기본적으로 Local 변수이다. 없으면 instance 변수도 확장해서 찾게 된다. this 를 컴파일러가 추가해서 인스턴스 변수를 찾게 된다.

※ Member [ ] i = new Member [ 3 ] ;
    for ( int idx = 0; idx < i.length; i ++)
    {
      System.out.println( i[idx].name);
    }
 -> 만약 i [ 1 ] 에 null 값이 들어있다면 참조하는 객체가 없다는 의미.
    i.length 까지가 아니라 실제로 값이 들어있는 곳까지 for 문을 돌려야한다.


※ refernce 타입 배열에서 중간의 값을 null로 해서 빼면 for문이 전체 조회시 돌아가지 않는다.

◎ 가변인자
- public void go ( int...i ) -> public void go ( int [ ] i ) 동일하다
                           -> type : int[ ]
- 가변인자의 경우 JDK 1.5 이상부터 사용이 가능하다.
- 원래의 경우라면 caller 에서 10, 20, 30, 50 을 전달하려면 배열을 만들어서 전달해주어야 해!
   -> int [ ] a = {10, 20, 30, 50 }     go( a )  : 번거롭다
- 가변인자를 사용하면 go (10, 20, 30, 50) 으로 사용이 가능하다 : 코드 내용은 동일하다.

◎ Parameter 와 Arguement
변수 <- 매개변수(parameter) : worker 메소드에서 사용
 ex) void go ( int i )
Argument 는 caller 메소드에서 사용되는 값 : main (String [ ] args )
 ex) go ( 30 );

◎ Package
※ c:\document\abc.txt
                                ->보통은 이것만 부르지만 실제로는 전체가 이름이다
- directory(folder) 와 같은 개념이다
    -> 연관성 있는 class file 들을 저장할 directory

- package 선언 : class file 이 저장될 directory를 source 코드에 선언하는 것
  구문 : package package명 [ . 하위 package 명.----- ] ; 
                           root 디렉토리         하위(sub) 디렉토리
   -> 소스코드의 첫 구문으로만 올 수 있다.
   -> 패키지 선언은 단 한번만 가능하다
   -> 패키지명의 식별자 규칙 : 관례 -> 모두 소문자를 사용, Domain 주소 이용해서 명명
      ex) kosta.or.kr
            package kr.or.kosta.exam;
            class A { }         -> \kr\or\kosta\exam\A.class

※ class 의 전체이름(fully name) : package명.class명 -> kr.or.kosta.exam.A

◎ Import
- 다른 package의 class 사용시 class 의 전체이름 (패키지.class 명) 을 다 써야함
- import 구문 : class 의 package를 미리 선언 해놓고, 소스코드에서는 class 명만 사용하도록 선언하는 구문
  구문 : import 패키지명.클래스명
            import 패키지명.*; ( 패키지안의 모든 클래스 사용시)
    -> import 선언은 package 선언 다음, class 선언 전에 해야한다.
    -> 필요하다면 여러번 가능하다.
    -> core api 의 java.lang 패키지의 class 들은 import 선언 없이 사용이 가능하다.

※ java\lang\string.class    or    system.class     or    Math.class  모두 생략이 가능

※Java source 코드의 순서
[1. package 선언 ] - 1번만 가능
[2. import 구문 ] - n번 가능
class 선언 및 구현

※ import 시 동일한 이름의 클래스가 있을 경우

ex) import a.b.Test;
      import c.d.Test;   -> 두개중 하나만 사용해야 한다.
   class M{
   Test t;
   c.d.Test.t;
}



 ※ import 에서의 * 사용
    a.b.K
    a.b.c.L 이라는 클래스가 있을때, import a.b.*; 을 사용하게 되면 a.b.K는 사용이 가능하나 a.b.c.L 은 사용이 불가능        
     -> * 은 class 를 import 하는 것이지 , 하위 디렉토리를 import 하지 않기 때문이다.

※ 이클립스에서 ctrl + o : 클래스의 인스턴스 멤버 다 보여주는 단축키

※메소드 이름 관례
추가 메소드 : addXXXX (insert)   - XXXX 추가할 데이터 이름
ex) addName, addAge, add
삭제 메소드 : remove
removeName , removeAge , remove
변경(수정) : set (update)
조회 - find/get (select)


※package 폴더 자동 만들기
명령 프롬프트 - javac -d . MyClass.java  ( 현재 디렉토리에 패키지처리를 자동으로 완성)
                         javac -d C:\ MyClass.java (C에 패키지 처리를 자동으로 완성)


※ bin.exam.A.class 의 실행 예시
폴더 경로 : C:\exc\  bin\exam\A.class
            -> directory 경로   ->package
1. 어느 디렉토리에서 실행이 될까? -> exc 폴더 : 클래스가 bin.exam.A 이기 때문!
2. 명령 프롬프트에서 java bin.exam.A 실행된다 -> java A.class에서 class 를 안붙이는 이유
                                                                                      = A 가 패키지로 취급이 되어버린다.      
-> 같은 package 의 다른 클래스를 찾을 때는 fully name 을 안써도 된다.       

반응형
Comments