-
6. 접근제한자와 this , Interfaceprogram_language 및 궁금한것/Java 2019. 4. 15. 19:46
패키지명: ex) kr.co.encore <-- 동일한 파일의 이름을 구분짓기 위해서
** 자바에서는 최소 2개 이상의 패키지 명을 쓰는 것을 권장
저장이력을 볼 수 있다.
클래스 - 마우스 오른쪽- Relpays with - Local History
{ 중괄호 }<-- scope, Body
접근지정(제한)자 :AccessControl
public : 같은패키지는 물론 서로 다른 패키지에서도 접근 가능
protected : 서로 같은 패키지에서 접근가능, 만약 상속관계를 갖는다면 다른 패키지라도 자식이 부모를 참조가능
default(생략) : 서로 같은 패키지에서 접근가능
private : 같은 클래스 내에서만 (맴버끼리만) 접근가능
* 상속은 굳이 같은 패키지가 아니여도 된다. 단, 접근 제한자만 private, default가 아니라면
접근지정자 위치
1. 필드
[접근지정자 4개] 자료형 변수명;
2. 메소드
[접근지정자 4개] 리턴자료형 메소드명( )
{
}
-----------------필드와 메소드는 클래스 안에 존재해야 한다.
3. 클래스
[접근지정자 2개- public / default] class 클래스명{
}
4. 생성자
<this> 자기참조연산자
--> 현재 클래스를 가르키는 레퍼런스 변수(참조변수)!
--> 보통은 생략한다.
1. 메소드 내에서 사용한다.
2. 객체 생성자내에서 다른 생성자를 호출시 사용한다.
3. 매개변수(지역변수)와 맴버변수(필드)를 구분하기 위해 맴버변수 앞에 this.을 붙여 사용한다.
* 메소드 안에 쓰는 변수와 클래스에 쓰이는 변수
* 배개변수와 맴버변수명이 같은 경우가 많다.
** 즉, this가 붙으면 클래스의 변수이다.
** println <-- PrintStream
** 메소드 호출싱에는 항상 누구 호출인지 명시해야 한다. 같은 클래스라면 생략을 많이 한다.
형식)
this.필드명
this.메소드명();
this(); <-- 생성자 호출
참고)
super.필드명
super.메소드명();
super( ); <-- 부모클래스 생성자 호출
Abc a= new Abc(500)
sysout(a.su) <--값은 0
public class Abc{
int su;
public Abc(){
}
public Abc(int su){
su =su;
}
}
* 클래스 앞에는 public과 생략 둘 중 하나만 쓸 수 있다. 저장파일명.class만 public을 붙일 수 있다.
<Interface> 인터페이스 - 객체를 연결해 주는 객체
쉽게 메뉴판을 생각하면 된다.
즉, 주방과 나를 연결시켜주는 메뉴판(인터페이스)라고 한다.
짬뽕을 만들 수 있어요. 볶음밥을 만들 수 있어요. --> 주문 --> 조리 --> 식사
주문하는것은 주방은 다 만들어야 한다. 즉, 메뉴판에 있는것은 주방에도 있어야 한다.
추가로 만드는 것은 상관 없다.
형식)
interface 인터페이스명{
// 필드 <-- int su
[고정 public static final ] int su;
// 선언된 메소드 <-- class와 다르다.
[ 고정 public, abstract ] void print();
}
--> 저장: 인터페이스명.java -컴파일-> 인터페이스명.class
- interface의 구성맴버는 필드, 선언된 메소드로만 구성
void print(){
} <-- 정의된 메소드, 구현된 메소드!
void print(); <-- 선언된 메소드 (바디없는, 영역괄호 없는 메소드)
<손님의 입장>
- 서로 다른 제품에 연결할 수 있는 공통 연결 모듈을 의미.
file System, DatabaseSystem
공통된 CRUD를 정의한 것이 Interface이다.
<주방의 입장> - 객체를 생성하는 곳
- 클래스에 다중 상속을 구현할 수 있다. // 내가 주방장이다.
난 주방장이야. 메뉴판을 여러개 받을 수 있지.
- ★ 인터페이스는 어떻게 사용하나요? 클래스에 구현해서 사용합니다.
키워드: implements (구현의 의미를 갖는다.)
주방 implements 메뉴 <- 주방은 메뉴를 참고한다. 메뉴가 사라져도 주방에 영향을 주지 않는다.
잘 모르겠다면 손님의 입장에서 주문 할때를 생각하자.
손님이 메뉴판에서 음식을 주문하면 음식이 만들어지는 과정은 생각하지 않는다. 주문한 음식만 나오면 된다.
(= 단, 메뉴판에 있는 음식들은 주방에도 꼭 있어야 한다. )
class 클래스명 implements 인터페이스명 {
// 클래스- 주방, implements- 구현의 약속, 인터페이스- 메뉴판
}
new를 대체할 수 있는 것을 static이라고 한다.
new - 동적 메모리 할당 static - 정적 메모리 할당
<final>
1. final 자료형 변수명;
----> 마지막 변수 : 상수 ( 더이상 변하지 않는다.) constatnt
----> 상수의 식별을 위해 전체 대문자로 표기.
예) final int MAX=100; // <--final은 전체 대문자로 표기한다.
max++; --> 101: 에러발생 - 상수는 값의 변경을 할 수 없다.
2. final 리턴형 메소드명( ){ }
----> 마지막 메소드: 오버라이딩(메소드 재정의) 할 수 없는 메소드
3. final class 클래스명 { }
----> 마지막 클래스 : extands를 할 수 없다. 자식클래스를 갖지 않는 클래스 이다.
----> 완벽한 클래스( 자식을 통한 기능확장을 원치 않는다.)
----> 보안
<클래스와 인터페이스 간의 상속 문법>
1.
class A{}
class B extends A{ // extens뒤에선 상속 받고자 하는 한개의 클래스만 정의!
// 확장(자식클래스를 확장 클래스!)
}
------------------------------------------------------------------------------------
interface A{ }
interface B{ }
class C implements a,b( // a,b인터페이스내의 선언된 메소드를 c클라스에서 전부 구현
// 구현의 약속
}
------------------------------------------------------------------------------------
interface A{}
class B{}
class C implements A extens B{
// 에러발생: 클래스와 인터페이스를 동시에 상속할때는 클래스먼저, 인터페이스 나중에
// implrmrnyd가 먼저 나오면 컴파일러가 extens Object 를 implemens키워드 앞에 추가 한것
}====>(x)
class C extend B implement A{
}====>(o)
interface A{ void hello(); }
interface B{ void hi(); }
interface C extands A,B{ // implements(x)
void good();
}
------------------------------------------------------------------------------------
class A { void hello(){}}
interface B A{
} <-- 말이 안됨!
반응형'program_language 및 궁금한것 > Java' 카테고리의 다른 글
if문과 case문의 성능비교 (0) 2019.04.18 7. Array , JavaBeans, 추상클래스 (0) 2019.04.16 이클립스 사용 단축키 (0) 2019.04.15 5. 자바의 객체 지향이란? (OOP) (0) 2019.04.12 4. 자바의 입력 (0) 2019.04.11