일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 코딩테스트
- 클린아키텍처
- 티스토리챌린지
- Effective Java
- Spring
- 이펙티브자바
- 스프링핵심원리
- ElasticSearch
- 오블완
- 이차전지관련주
- kubernetes
- JavaScript
- k8s
- 예제로 배우는 스프링 입문
- 스프링
- Effective Java 3
- 알고리즘정렬
- 자바
- 이펙티브 자바
- 스프링 핵심원리
- 자바스크립트
- 카카오 면접
- 알고리즘
- 엘라스틱서치
- 카카오
- 스프링부트
- Sort
- 김영한
- effectivejava
- java
- Today
- Total
Kim-Baek 개발자 이야기
자바 기본 (13) - 가변인자, 패키지, import 본문
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다
※ 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 을 안써도 된다.
'개발 > java basic' 카테고리의 다른 글
자바 기본 (15) - 의존 관계, is a, has a (0) | 2020.10.06 |
---|---|
자바 기본 (14) - static, 싱글톤 (0) | 2020.10.05 |
자바 기본 (12) - 자바의 메모리 영역, 호출 스택 (0) | 2020.10.03 |
자바 기본 (11) - 생성자, 접근제한자, VO (0) | 2020.10.02 |
자바 기본 (10) - 오버로딩, 생성자 (0) | 2020.10.01 |