1. Java 기초 다지기 (5-2)
package kr.co.jungmin.entity;
// 사실 kr 패키지를 만들고 co 패키지를 만들고 jungmin, entity.....를 만듬
public class Person {
// 만약 package class 이면 다른 패키지에 import해도 참조 못함
String name;
public void print() {
System.out.println(name);
}
}
package kr.co.jungmin.entity;
public class Major {
String major;
public void setName(Person p, String name) {
p.name = name;
}
public void print() {
System.out.println(major);
}
}
package kr.co.jungmin;
public class Student {
}
package kr.co.jungmin;
// 패키지명은 모두 소문자. 특수문자 사용 X
import java.lang.*; // 자동으로 되어있음 String, System 등
import kr.co.jungmin.entity.Person;
import kr.co.jungmin.entity.Major;
import kr.co.jungmin.entity.*; // 모두 import. * (Asterisk). 실무에서는 사용 X
// or 빨간줄 클릭하면 import 구문 생김 or Ctrl + Shift + o (Organize import)
class Car{
String instruct; // [없음] String -> 인스턴스 멤버. 인스턴스를 통해 참조해야함
static String instruct2; // static(지정예약어) 사용 시 클래스 멤버임
static void setInstruct2(String instruct2) {
Car.instruct2 = instruct2;
System.out.println(Car.instruct2);
}
static void getInstruct2() {
System.out.println(Car.instruct2);
// System.out.println(Car.instruct); Non static 참조 못함. 인스턴스 멤버임. this 못쓰기 때문
}
void getInstruct() {
System.out.println(instruct); // Non static 임. instruct 상위로 찾아서 참조 가능
}
int instancecount = 0 ; // 인스턴스 멤버 선언과 동시에 초기화 가능
static int count; // 일반적으로는 선언과 동시에 초기화
static { // static field를 통해 초기화하는 방법도 있음
count = 0;
}
public Car() {
count++;
instancecount++;
System.out.println(count + "번째 자동차가 생산되었습니다.");
}
public int getCount() {
return count;
}
public int getInstancecount() {
return instancecount;
}
}
public class Application { // Application 이라는 클래스는 kr.co.jungmin 이라는 패키지에 포함되어있음
public static void main(String[] arg) {
// Person p1 = new Person(); 다른 패키지에 위치해 참조할 수 없음. 아래와 같이 표기해야함
// kr.co.jungmin.entity.Person p1 = new kr.co.jungmin.entity.Person();
// 이러한 기술방식을 Full Quality Domain Name(FQDN) 이라고 함.
// 아니면 패키지를 import 하면됌
Person p1 = new Person();
Student s1 = new Student();
// p1.name = "홍길동"; [package] 생략되어있기 때문에 불가능
p1.print(); // public void 이기 때문에 가능
Major m1 = new Major();
m1.setName(p1, "문수진"); // m1의 메서드 public -> 접근가능, setName의 인수 Person p 는 같은 패키지 -> 접근가능
p1.print();
Car.instruct2 = "벤츠"; // 클래스 멤버는 객체를 생성하지 않아도 사용할 수 있는 멤버
System.out.println(Car.instruct2);
Car.setInstruct2("아우디");
Car.getInstruct2();
Car c2 = new Car();
Car c3 = new Car();
System.out.println(c2.getCount()); // static 클래스 멤버는 공유 (Count 공유). 메모리 소비를 줄일 수 있음
System.out.println(c3.getCount()); // Non static 인스턴스 멤버는 각각
System.out.println(c2.getInstancecount());
System.out.println(c3.getInstancecount());
}
}
감사합니당🐷🐷🐷