패키지란?
관련있는 클래스 파일들끼리 묶어 놓은 디렉토리
자바의 접근 지정자
클래스나 일부 멤버를 공개하여 다른 클래스에서 접근하도록 허용
클래스 접근 지정
- public: 다른 모든 클래스에 접근 허용 ex. public class Class1
- default: 같은 패키지의 클래스에만 접근 허용 ex. class Class2
멤버 접근 지정
- public: 모든 클래스에 허용
- protected: 동일 패키지, 다른 패키지에서 상속받은 서브클래스도 허용
- default: 동일 패키지만 허용
- private: 동일 클래스만 허용
static 멤버와 non-static 멤버
non-static 멤버 | static 멤버 | |
선언 | class Sample1 { int n; void g() {...} } |
class Sample2 { static int n; static void f() {...} } |
공간적 특성 | 멤버는 객체마다 독립적으로 별도 존재 - 인스턴스 멤버라고도 부름 |
멤버는 클래스당 하나 생성 - 객체 내부가 아닌 메모리에 따로 생성 |
시간적 특성 | 객체를 생성 해야 멤버 사용 가능 - 객체가 사라지면 멤버도 사라짐 |
클래스 로딩하면 멤버 생성 - 객체 생기기 전에도 사용 가능 - 프로그램이 종료되어야 멤버 사라짐 |
공유의 특성 | 공유되지 않음 (객체마다 각각 관리) | 동일한 클래스의 모든 객체들에 의해 공유됨 => 전역 변수, 전역 함수 |
static 메소드는 non-static 멤버에 접근할 수 없음. 반대로, non-static 메소드는 static 멤버 사용 가능
this 사용 불가
why? => static 메소드는 객체가 생성되지 않은 상황에서도 호출 가능해서!
/*
• StaticEx의 코드가 정상 작동할 수 있도록 ArrayUtil 클래스를 작성
• concat(int[] a, int[] b) 메소드 : int 배열 a와 int 배열 b를 받아 이를 연결한 새로운 배열 리턴
• print(int[] a) 메소드 : 배열 a 출력
*/
class ArrayUtil {
public static int[] concat(int[] a, int[] b) {
int [] c = new int [a.length + b.length];
for (int i = 0; i <a.length; i++) {
c[i]=a[i];
}
for (int i = 0; i <b.length; i++) {
int index = a.length+i;
c[index] = b[i];
}
return c;
}
public static void print(int[] a) {
for(int i=0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
public class StaticPrac {
public static void main(String[] args) {
int [] array1 = {1, 5, 7, 9};
int [] array2 = {3, 6, -1, 100, 77};
int [] array3 = ArrayUtil.concat(array1, array2);
ArrayUtil.print(array3);
}
}
final 키워드
- final 클래스: 상속 불가
- final 메소드: 오버라이딩 불가
- final 필드: 선언 시 초기 값 지정해야 함. 값 변경 불가
'Language > JAVA' 카테고리의 다른 글
자바기반응용프로그래밍 - 반복문 (0) | 2022.04.11 |
---|---|
자바기반응용프로그래밍 - main() 메소드로 인자 전달 (0) | 2022.04.11 |
자바기반응용프로그래밍 - 메소드, 레퍼런스, 오버로딩, 가비지 컬렉션 (0) | 2022.04.10 |
자바기반응용프로그래밍 - 객체 지향을 위한 클래스와 객체 (0) | 2022.04.09 |
자바기반응용프로그래밍 - 연산자, 조건문 (0) | 2022.04.08 |