티스토리 뷰

 

클래스 외부 구성 요소

package
import
class 클래스이름 { ... }

public class A {
    //클래스 내부
    필드
    메소드
    생성자
    이너클래스
}

1. Package

클래스 파일 묶음. 목적별로 묶어서 관리.

패키지마다 이름 공간(namespace) 생성 → 클래스 이름 충돌 방지.

같은 이름의 클래스라도 다른 패키지에 속해있으면 충돌 발생하지 않음.

패키지 만들 때,

aa, bb, aa.a1(aa 폴더 안에 a1 만듦)

 

(1) Java 제공 패키지

-java.lang : 자바의 가장 기본 클래스 묶음

-java.util : 유용한 확장 클래스 묶음

-java.awt / java.swing /javafx: 자바 그래픽 관련 클래스 묶음

-java.io / java.nio: 자바 입출력 패키지 관련 클래스.  파일에 저장된 데이터 가져올 때, 네트워크로부터 데이터를 가져올 때 사용.

 


2. 클래스 접근제어  public과 default

접근 및 사용 public default
같은 패키지 O O
다른 패키지 O X

└다른 패키지의 public을 사용하려면 import 해야 함.

└만약 'private 필드변수'라면 같은 클래스 내부에서만 접근, 사용 가능.

-예시)

package aa;

public class AA {
    int i;    //default - 같은 패키지
    public void func() {  }
}

class A1 {  //default
    int j;
    public void func1() {  }
}
package bb;

public class BB {
    int i;
    public void func() {  }
}

class B1 {
    int j;
    public void func1() {  }
}
package aa;

public class PackageTest{
    //동일 패키지
    AA aa = new AA();  //public class AA
    aa.i = 10;         //default 멤버 변수
    aa.func();         //public Method

    A1 a1 = new A1();
    a1.j = 20;
    a1.func1();
    
    //다른 패키지
    BB bb = new BB();  //public class BB
    //int i = 30;      //puablic class지만 default
    bb.func();         //public class의 public Method
    
    //B1 b1 = new B1();  //default class는 다른 패키지에서 접근 x
    //int j = 40;
    //public void func1(){}  //public Method지만 default class라 x
}

3. import

다른 패키지의 클래스를 사용하고자 할 때

import 패키지명.클래스명

import abc.bcd.A;
import bcd.cde.A; // 패키지가 다른, 동일한 이름의 클래스는 두 개 이상 import 불가

import abc.bcd.* // *는 패키지의 모든 클래스를 한번에 임포트

4. 외부 클래스

클래스 외부에 정의. 동일한 파일에 작성된 클래스는 동일한 패키지 내 클래스로 간주.

하나의 파일에는 하나의 public class 존재(파일 이름과 동일한)

하나의 파일에 작성된 외부 클래스는 다른 패키지에서 사용 불가.

다른 패키지에서 사용하고자 한다면 파일 분리한 뒤 public class로 만들어주면 됨.

package abc.def;

class ABC { //외부 클래스}

public class DEF{
    ...
}

5. 자바 제어자(modifier)

(1) 접근 지정자(접근 제어자)

멤버 및 생성자에서 사용되는 접근 지정자

public protected default private
동일 패키지의 모든 클래스
+ 다른 패키지 모든 클래스
동일 패키지의 모든 클래스 +
클래스를 상속받은
자식 클래스
동일 패키지의 모든 클래스 동일 클래스 내부
import 가능 상속(extends) 관계에 있는 import 불가  

 

_예제) 접근 지정자 사용 가능 범위 확인

//생성자 클래스
package hiding;
public class Student {
    int studentID; //default : int, string
    private String studentName;  //studentTest class에서만 사용 가능.
                                 // 동일 패키지 다른 클래스에서 사용하려면 get, set 사용
    int grade;
    String address;
		
    //getter, setter
    //우클릭 > source > Generate Getter and Setters
    //public이라 어디서든 접근 가능.
    //다른 클래스(객체 생성 클래스)에서 쓰려고 geter, setter 사용한 것.
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
}

getter/setter : private 변수지만 다른 클래스(test.class)에서 쓰려고 사용함.

//객체 생성 클래스(test)
package hiding;
public class StudentTest {
	public static void main(String[] args) {
		Student studentLee = new Student();
//		studentLee.studentName = "이상원";
		studentLee.setStudentName("이상원");
		
		System.out.println(studentLee.getStudentName());
		System.out.println("111111");
	}
}

동일한 파일 내의 클래스라고 하더라도 나중에 저장될 때는 클래스별로 저장됨.

 

(1-2) 생성자 접근지정자

컴파일러가 자동 생성하는 기본 생성자의 접근 지정자는 클래스의 접근 지정자와 동일

public protected default private
동일 패키지의 모든 클래스
다른 패키지 모든 클래스
동일 패키지의 모든 클래스
다른 패키지 자식 클래스
동일 패키지의 모든 클래스 동일 클래스
import 가능 상속(extends) import 불가  

improt 가능. 인스턴스화(객체 생성 : new) 불가

 

*실습 예제_대중교통 이용 요금

 

(2) static

객체 생성없이 사용. 객체 생성 후 사용하는 것은 지양.

Class A{
   int m =3;
   static int n = 5;

//인스턴스 필드
    A a = new A();
    System.out.println(a.m); //3
    
//static
    System.out.println(A.n);

//static은 객체 생성 후 사용을 지양
//  A a = new A();
//  System.out.println(a.n);
}

객체 생성없이 바로 사용 가능. 객체 간 공유 기능.

Heap 메모리에 저장되지 않음. 인스턴스 영역, 메소드 영역. 새로운 값으로 덮어씌움.

 

-예시)

-필드

//static은 객체 생성없이 '필드이름.'으로 연결
A a1 = new A();
A a2 = new A();
a1.m=5;
a2.m=6;
System.out.println(a1.m);  //5
System.out.println(a2.m);  //6
a1.n=7;
a2.n=8;
System.out.println(a1.n);   //8
System.out.println(a2.n);  //8
A.n=9;
System.out.println(a1.n);  //9
System.out.println(a2.n);  //9

-메소드

class A{
    void abc(){
        System.out.println("인스턴스메서드");
    }
    // 이걸 사용하려면 객체 생성
    // A a = new A();
    // a.abc();
    
    static void bcd(){
        System.out.println("static메서드");
    }
    //객체 생성없이 바로 사용
    //A.bcd(); //static메서드
    //클래스명과 연결해 사용했네...
}

 

(2-1) static 주의사항

static 메소드 내에서는 static 멤버만 사용 가능. 객체 생성 이전에 사용 가능해야 하므로.

class A {
    int a; //객체 생성 후 사용 가능 → static 메소드에서 사용 불가
    static int b;
    
    void abc () { //객체 생성 후 사용 가능 }
    
    static void bcd(){  }
    
    static void cde(){  }
    
}

└static int b;,  static void bcd(){  },  static void cde(){  }는 객체 생성 전에 사용할 수 있으며

   메서드 내부에서 int a, void abc(){} 못 씀. static이만들어 질 때 객체 생성 안 됐을 가능성이 농후하므로 아예 못 씀(?)

   정적 메서드(static)만 사용 가능

└int a;, void abc() { }는 객체 생성 후에 사용할 수 있으며 static도 쓸 수 있음.

'수업 > └Java' 카테고리의 다른 글

[00]Wrapper class  (0) 2022.02.02
[CH7]상속과 다형성  (0) 2022.02.02
[CH06_2]클래스 내부 구성 요소  (0) 2022.01.31
[CH06_1]클래스 기본 문법  (0) 2022.01.31
[CH05_2]참조 자료형 : String  (0) 2022.01.31
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함