본문 바로가기
language/Java

자바의 기본구성2

by 스파이디웹 2020. 3. 2.
728x90

※패키지(package)

-사전적의미는 상자,포장물

-클래스들을 구분 짓는 폴더와 비슷한 개념

 

※패키지 선언의 제약사항

1.소스의 가장 첫 줄에 있어야만 한다.

 

2.package 선언 위에 주석이나 공백이 있어도 상관 없다. 다른 문장은 하나라도 있으면 오류

 

3.패키지 선언은 소스 하나에는 하나만 있어야 한다.(한 소스 파일이 두개의 폴더에 한번에 존재할 수 없기 때문에 당연하다.)

 

4.패키지 이름과 위치한 폴더 이름이 같아야만 한다.

 

5.패키지 이름을 지정할때 java로 시작 하면 안 된다.

 

6.패키지 시작 이름에 따른 내용

java: 자바 기본 패키지(Java 벤더에서 개발)

javax: 자바 확장 패키지(Java 벤더에서 개발)

org: 일반적으로 비 영리단체(오픈 소스)의 패키지

com: 일반적으로 영리단체(회사)의 패키지

 

7.패키지 이름은 모두 소문자로 지정

 

8.자바의 예약어를 사용하면 절대 안 된다.

 

ex)package c.javapackage; 가 바로 패키지 선언문

 

※import(다른 패키지에 있는 클래스를 사용할 때)

-자바에서는 패키지가 있을 때, 같은 패키지에 있는 클래스들과 java.lang 패키지에 있는 클래스들만 찾을 수 있다.

 

-다른 패키지에 있는 클래스를 찾지 못할 때 사용하는 것

 

ex)import 패키지이름.클래스이름;

-그 패키지에 있는 클래스를 사용하겠다는 것을 컴파일러에게 알려줌.

 

ex)import 패키지이름.*;

-그 패키지에 있는 모든 클래스를 import한다.

-하위 패키지에 선언한 클래스들은 import하지 않는다.

 

ex)import static c.javapackage.sub.SubStatic.subStaticMethod;

-static 변수에 접근하거나 static 메소드를 사용할 때 import static 사용

-static 메소드나 변수가 중복되는 상황에서는 자신의 클래스에 있는 static 변수나 메소드가 import static으로 가져온 것보다 우선이다.

 

※import하지 않아도 되는 패키지

1.java.lang 패키지(c언어의 <stdio.h> 표준입출력 헤더파일과 비슷한역할)

2.같은 패키지

 

※접근 제어자(Access modifier)

-4개의 접근 제어자가 있다.

-클래스, 메소드, 인스턴스 및 클래스 변수를 선언할 때 사용

 

1.public

-누구나 접근할 수 있또록 할 때 사용

 

ex)public void publicMethod() {

}

 

2.protected

-같은 패키지 내에 있거나 상속받은 경우에만 접근

 

ex)protected void protectedMethod() {

}

 

3.package-private(default)

-아무런 접근 제어자를 적어주지 않을 때이며, package-private

-같은 패키지 내에 있을 때만 접근

 

ex)void packagePrivateMethod() {

}

 

4.private

-해당 클래스 내에서만 접근 가능

 

ex)private void privateMethod() {

}

 

 

※클래스 접근 제어자 선언할 때의 유의점

-클래스를 선언할 때에는 반드시 파일 이름에 해당하는 클래스가 반드시 존재해야만 한다.

 

ex)Profile.java라는 소스코드에 Profile이라는 클래스를 public으로 선언하지 않고, 같은 소스에 public으로 선언된 다른 클래스가 있다면, 이 소스는 컴파일이 되지 않는다.

 

※상속(Inheritance)

-public class 자식클래스이름 extends 부모클래스이름

 

-extends는 자바의 예약어, 부모 클래스를 자식클래스가 상속받아서, public 및 protected로 선언되어 있는 모든

변수와 메소드를 내가 갖고 있는 것처럼 사용할 수 있다.

 

-다른 패키지에 선언된 부모 클래스의 접근 제어자가 없거나 pirvate로 선언된 것들은 자식 클래스에서 사용할 수 없다.

 

1.부모 클래스에서는 기본 생성자를 만들어 놓는 것 이외에는 상속을 위해서 아무런 작업을 할 필요는 없다.

 

2.자식 클래스는 클래스 선언시 extends 다음에 부모 클래스 이름을 적어준다.

 

3.자식 클래스의 생성자가 호출되면, 자동으로 부모 클래스의 매개 변수 없는 생성자가 실행된다.

 

4.자식 클래스에서는 부모 클래스에 있는 public, protected로 선언된 모든 인스턴스 및 클래스 변수와 메소드를 사용할 수 있다.

 

-자바에서는 다중 상속이 안 된다,extends 뒤에 클래스를 두 개 이상 나열하면 컴파일이 되지 않는다.

 

-부모클래스의 상속을 받는 자식클래스의 모든 생성자가 실행될 때 부모클래스의 기본 생성자를 찾는다.

이것이 없을경우, 매개변수를 받는 메소드가 있을 경우에 컴파일 에러가 난다.

 

-super()라는 예약어는 부모 클래스의 생성자를 호출한다는 것을 의미

 super.printName()로 사용하면 부모 클래스에 있는 printName()이라는 메소드를 호출한다는 의미

 자식 클래스의 생성자에는 자식 클래스를 컴파일할 때 자동으로 super()라는 문장이 들어간다.

 

※메소드 overriding

-자식 클래스에서 부모 클래스에 있는 메소드와 동일하게 선언하는 것

 

-접근 제어자, 리턴 타입, 메소드 이름, 매개 변수 타입 및 개수(시그니처,signature)가 모두 동일해야만 성립

 

ex)private으로 부모클래스가 선언했을 시, 자식클래스는 pirvate 접근 권한 이상으로 선언

void으로 부모클래스 선언 시, 자식 클래스도 동일하게 void로 선언 해야 함.

 

-다른 무엇보다 더 중요한,최우선 시 되는 이라는 뜻

 

-자식클래스의 메소드가 실행되고 부모클래스의 메소드는 실행 안 되는것.

728x90

댓글