티스토리 뷰
클래스 외부 구성 요소
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
- html atrribute
- Java
- scanner
- typeof
- empty-cell
- 미디어 태그
- improt
- 외부구성요소
- html pre
- 기본선택자
- ScriptTag
- text formatting
- 변수
- html
- caption-side
- selcetor
- html input type
- BAEKJOON
- html layout
- CascadingStyleSheet
- 스크립태그
- border-spacing
- input type 종류
- html base tag
- initialized
- html a tag
- A%B
- css
- 입력양식
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |