패키지와 static
패키지(package)
자바 프로그램은 많은 클래스로 구성되고, 이러한 클래스를 폴더 형식으로 효율적으로 관리하는 것을 패키지라고 한다
패키지 이름 결정 요령
- 패키지에 속해 있는 클래스가 최대한 다른 클래스와 중복되는 것을 방지하도록 만든다
- 일반적으로 도메인을 거꾸로 이용한다 Ex) com.java.hello, kr.co.회사이름 ...
- 개발 중에 패키지의 이름과 구조는 변경될 수 있다
- 패키지 이름만 보고도 해당 패키지 안에 있는 클래스가 어떤 속성과 기능을 가지고 있는지 예상이 될 수 있도록 이름을 만든다
import
클래스가 하나
package com.java.employee;
import com.java.dailyJournal.DailyJournal;
public class Employee{
}
-----------------------------------------
package com.java.dailyJournal;
public class DailyJournal{
}
클래스가 여러 개, 다음과 같이 3가지의 방법으로 import가 가능하다
1. 패키지.*
2. 패키지.각각 설정
3. 패키지.클래스명
package com.java.employee;
import com.java.dailyJournal.*; // 1.각각 import해도 상관없다
public class Employee{
DailyJournal dj = new DailyJournal();
ObjectClass oc = new ObjectClass();
// 2.import없이 아래와 같이 사용할 수 도 있다(비효율)
// com.java.dailyJournal.DailyJournal dj = new com.java.dailyJournal.DailyJournal();
// com.java.dailyJournal.ObjectClass oc = new com.java.dailyJournal.ObjectClass();
}
-----------------------------------------
package com.java.dailyJournal;
public class DailyJournal{
}
package com.java.dailyJournal;
public class ObjectClass{
}
static
클래스의 속성과 메서드에 static 키워드를 사용하면 어디서나 속성과 메서드를 공유할 수 있다
public class Dog {
String name;
static int age=0;
public Dog(String n) {
this.name = n;
}
public void old(int a) {
age += a;
}
}
public class MainClass {
public static void main(String[] args) {
Dog dog1 = new Dog("John");
Dog dog2 = new Dog("Peter");
dog1.old(1);
dog1.getInfo();
dog2.old(2); // age를 공유하기 때문에 dog1에서 더한 1에 2를 추가한다
dog1.getInfo();
dog2.getInfo();
}
}
--- result ---
John 1
John 3
Peter 3
Object 없이 호출할 수 있다
public static void main(String[] args){
System.out.println(isTrue());
static boolean isTrue(){
return true;
}
}
----- result -----
true
데이터 은닉
객체가 가지고 있는 데이터를 외부로부터 변질되지 않게 보호하는 방법
멤버 변수의 private 설정
Dog 클래스에 name과 같이 외부에 의해 변질되지 않아야 하는 경우 private로 설정한다
public class Dog {
private String name;
static int age=0;
public Dog(String n) {
this.name = n;
}
public void old(int a) {
age += a;
}
}
데이터(속성) 변질이 우려되는 시나리오
-
직원 급여 프로그램에서 급여 담당자가 실수로 급여액을 잘못 입력하는 경우
-
변경될 수 없는 사번이 변경되는 경우
속성을 private로 설정할 경우, 외부에서 접근할 수 없으므로 영원히 변경이 불가능할까?
이를 해결하기 위해 메서드로 있는 것이 setter, getter
setter / getter
public class Student{
private String name;
private int score;
public Student(String n, int s){
this.name = n;
this.score = s;
}
public void getInfo(){
System.out.println("name: "+name+" / score: "+score);
}
// getter, setter
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getScore(){
return score;
}
public void setScore(int score){
this.score = score;
}
}
public class MainClass{
public static void main(String[] args){
Student student1 = new Student("홍길동", 80);
student1.getInfo();
student1.setScore(100);
student1.getInfo();
}
}
--- result ---
name: 홍길동 / score: 80
name: 홍길동 / score: 100
'Study > Java' 카테고리의 다른 글
[Java] 내부(inner) 클래스 & 익명(Anonymous) 클래스 (0) | 2020.07.03 |
---|---|
[Java] 상속, Object & Super 클래스 (0) | 2020.07.03 |
[Java] 생성자와 소멸자 그리고 this 키워드 (0) | 2020.07.02 |
[Java] 메서드, 오버로딩, 오버라이딩 (0) | 2020.07.01 |
[Java] 클래스와 객체의 생성 (0) | 2020.07.01 |
댓글