1. 패키지
- 관련 있는 클래스 파일을 저장하는 디렉터리
- 자바 응용프로그램은 하나 이상의 패키지로 구성
- 기본적으로 패키지 외부에는 접근하는 것을 거부한다. (한 패키지가 같은 가족이라고 생각하기)
2. 접근 지정자
접근 지정자(access modifier)를 사용하여 변수나 메서드의 사용 권한을 설정할 수 있다. 다음과 같은 접근 제어자를 사용하여 사용 권한을 설정할 수 있다.
- private
- default
- protected
- public
접근 제어자는 private < default < protected < public 순으로 보다 많은 접근을 허용한다.
- public 멤버 : 패키지에 관계 없이 모든 클래스에게 접근 허용
- protected 멤버 : 같은 패키지 내의 다른 모든 클래스에게 접근 허용 , 상속 받은 서브 클래스는 다른 패키지에 있어도 접근 가능
- private 멤버 : 동일 클래스 내에만 접근 허용 , 상속 받은 서브 클래스에서 접근 불가
- 디폴트(default) 멤버 : 같은 패키지 내의 다른 클래스에게 접근 허용
12번째 줄에 arg는 객체를 부르는 이름(변수, 정확히는 지역변수). Heap영역에 생성된 메모리가 실제 객체.
객체를 부르는 이름은 stack영역에서 Heap 영역에 생성된 객체를 가리키는 주소값을 가진다.
지역변수 arg가 생기면 또다른 stack영역에서 같은 객체를 가리키는 주소값을 가지는 변수가 생성된다.
21번째 줄에 있는 지역변수 arg는 main메서드가 끝나는 29번째 줄에서 없어진다.
13번째 줄에 있는 arg는 지역변수이므로 14번째 줄로 가면 없어진다. 따라서 31번째 줄에 출력되는 arg.x는 main안에 있는 지역변수 arg이다.
2.1 private 멤버변수
- private 멤버변수에 접근이 불가하다는 뜻은 수정도 불가하고 읽어오는 것도 불가능하다.
- public 멤버변수는 다른 클래스에서 값을 불러오거나 수정할 수 있다.
- private 멤버변수 값을 수정하거나 불러오기 위해선 해당 클래스 안에서 setMethod()메서드나 getMethod()메서드를 멤버메서드로 선언해서 객체 내에서 수정하고 return값으로 받아올 수 있다.
3. Static 키워드
자바에서 static 키워드는 주로 두 가지 목적으로 사용됩니다. 하나는 클래스 변수(또는 클래스 메서드)를 선언하는 데 사용되며, 다른 하나는 특정 인스턴스에 속하지 않는, 즉 클래스 자체에 속하는 멤버를 나타내는 데 사용됩니다. 이러한 특성 때문에 static 멤버는 인스턴스를 생성하지 않고도 접근할 수 있습니다.
3.1. static 변수 (클래스 변수, 클래스 멤버 변수)
static 변수는 클래스의 모든 인스턴스 간에 공유되는 변수입니다. 이 변수는 클래스가 메모리에 로드될 때 단 한 번만 생성되며, 모든 인스턴스가 이 변수의 단 하나의 복사본을 공유합니다. 그래서 한 인스턴스가 이 변수를 수정하면 변경사항이 모든 인스턴스에 반영됩니다.
3.2. static 메서드 (클래스 메서드)
static 메서드는 인스턴스 없이 호출될 수 있는 메서드입니다. 이 메서드는 클래스의 인스턴스 변수에 직접 접근할 수 없고 오직 static 변수나 다른 static 메서드에만 접근할 수 있습니다. static 메서드는 유틸리티 함수나 헬퍼 메서드를 구현할 때 자주 사용됩니다.
3.3 static 사용시 주의사항
- static 변수는 메모리 관리 측면에서 효율적일 수 있지만, 과도한 사용은 객체 지향 프로그래밍의 원칙과 상반될 수 있으멀로 주의가 필요합니다.
- static 메서드는 오버라이딩될 수 없습니다. 그러나 상속받은 클래스에서 같은 시그니처의 static 메서드를 선언할 수는 있으나, 이것은 오버라이딩이 아니라 '숨김'(hiding)입니다.
- static 초기화 블록을 사용하여 static 변수를 초기화할 수 있습니다. 이 블록은 클래스가 처음 로딩될 때 한 번만 실행됩니다.
자바에서 static 키워드는 이와 같이 클래스 레벨의 멤버를 정의하는데 사용되며, 객체 지향 프로그래밍에서 특정 상황에 매우 유용하게 사용됩니다.
3.4 객체멤버 예시
40번째 줄 예시) Math.random();
3.5 인스턴스 멤버 변수와 Static의 관계
static 메서드는 main이 있는 클래스뿐만 아니라 자바에서 어떤 클래스에서든 만들 수 있습니다. static 메서드는 해당 클래스의 인스턴스 없이도 호출할 수 있는 메서드를 의미합니다. 클래스 메서드라고도 하며, 클래스 레벨에서 작동하기 때문에 클래스의 인스턴스 변수에 직접 접근할 수 없습니다(인스턴스 변수는 객체가 생성될 때마다 각 객체에 속한 변수이기 때문입니다). 대신, static 메서드는 클래스 변수(또한 static으로 선언된 변수)에 접근할 수 있습니다.
예를 들어, 어떤 유틸리티 기능을 제공하는 메서드가 필요하고 이 메서드가 객체의 상태에 의존하지 않을 때, 그 메서드를 static으로 선언할 수 있습니다. main 메서드가 가장 잘 알려진 static 메서드의 예입니다. main 메서드는 프로그램 실행 시 시작점으로 작동하며, 인스턴스를 생성하지 않고도 호출됩니다.
4. 팩토리얼, power 메서드 연습문제
[팩토리얼]
1. 클래스 이름 : Calculate
-int getFactorial(int num)
:매개변수로 전송된 num의 팩토리얼값을 구하기.
예시)5 입력 : 5* 4 * 3* 2* 1
-int getPower(int num)
:입력된 값까지의 제곱의 합을 구하기
예시) 3입력 : 1*1 + 2*2 + 3*3
2. 메인이 있는 클래스 : CalculateExam (main메서드가 있는 클래스)
-연산할 값 입력받기
예시) 3입력 : factorial:6, power:14
-factioral: ___, power: ___출력하기
Calculate 클래스 내에 있는 getPower 메서드에서 재귀함수를 사용해봤다.
CalculateExam 클래스 main메서드에서 Calculate 클래스 객체를 생성하고 메서드를 불러와 print로 값을 출력했다.
5. 회원 검색 연습문제
1. Member 클래스 만들기
-private)name, height, weight, nation
-생성자
-메소드 : setName, setHeight, setWeight, setNation
-getName, getHeight, getWeight, getNation
2. MemberExam 클래스(main 메서드 포함 클래스)
-Member[] members = newMember[5];
-사용자에게 받은 배열을 매개변수로 >>>
-생성자 : 5명의 데이터 입력 받은 것으로 생성하기.
-boolean searchMember(String name) 이름 넣어서 그 이름이 members에 있는지 확인하기
-void printInfo(Member) : 이름, 키, 몸무게, 국적 출력하도록 메서드 만들고 호출하기.
- Member 클래스 9번째 줄에서 Member(String... str){ 부분은 자바에서 가변인자를 받는 방법이다. String name, String height... 이런식으로 4개를 모두 받아서 입력해도되겠지만 가변인자로(문자열 배열) 받아서 초기화하는 것도 가능하기에 사용해보았다.
- MemberExam 클래스 11번째, 19번째 줄에서 static없이 메서드가 생성되었으므로, 40번째 줄에 MemberExam memberExam = new MemberExam(); 를 선언해줘서 emeberExam.printInfo();이런식으로 메서드를 불러온다.
'Coding 공부 > Java' 카테고리의 다른 글
[Java_Summary] Singleton(synchronized), 상속, enum (0) | 2024.02.13 |
---|---|
[Java_Summary] 단축키, final, static final, Singleton, Scanner, package import (0) | 2024.02.07 |
[Java_Summary] 클래스(2) 생성자의 오버로딩, 객체의 깊은 복사와 얕은 복사, this, 객체의 메소드, 메소드 오버로딩, 가비지 (0) | 2024.02.02 |
[Java_Summary] 메소드에서 배열, 예제 (2) | 2024.02.01 |
[Java_Summary] 2차원 배열 (2) | 2024.01.30 |
댓글