캡슐화


캡슐화는 데이터와 데이터를 처리하는 기능(메소드)를 하나의 캡슐처럼 묶는것이다.

객체외부에서는 내부의 데이터를 접근할수 없고 외부에서의 접근이 허용하도록 정의된

세팅이나 게팅 메서드를 통해서 접근할수 있다.


캡슐화의 장점

객체 내부의 메서드가 정보은닉이되어 오류발생이 적다.

인터페이스가 간결해진다.


캡슐화가 필요한 이유

외부에서 조작하거나 접근하면 안되는 데이터가있을경우에 캡슐화를 사용해 접근을 막는다.


ex 물건을 판매하는 프로그램을 작성할때 가격이나 수량을 외부에서 접근해 조작할수있는경우나

수량같은 메서드를 통해 상호작용을통해 변경을해야하는 변수가 상호작용없이 외부에서 조작되면안되는경우

'Java' 카테고리의 다른 글

오버라이딩  (0) 2017.02.25
상속  (0) 2017.02.25
접근제어자  (0) 2017.02.25
static  (0) 2017.02.25
생성자  (0) 2017.02.25

접근제어 지시자는 접근의 허용 범위를 제한하는 용도로 사용이 된다.

접근제어 지시자는 public private protected 세가지가있다. 아무런 선언도 하지않는경우까지포함하여

총 네가지의 접근제어 선언이 가능하다.접근제어자를 사용하는 이유는

마치 은행이 누구나 접근 할 수 있는 창구와 관계자외에는 출입이 엄격하게 통제되는 금고를 구분하고 있는 이유와 같다.


public

public으로 선언이되면 어디서든 접근가능한 인스턴스 변수 및 메서드가 된다.


private

외부에서 인스턴스변수에 직접 접근하는것을 차단한다.

private가 선언되면 해당변수가 선언된 클래스 외부에서는 접근이 불가능해진다.

private가 선언이되면 해당 메소드나 변수의 클래스가 접근할수있는 유일한 수단이 된다.


default 

접근제어자를 선언하지 않는경우 이러한형태의 선언을 디폴트 선언 이라하며

default로 선언된 인스턴스변수 및 인스턴스메소드는 동일 패키지 내에서의 접근을 허용한다.

클래스가 디폴트일경우에 생성자도 디폴트생성자가 자동으로 선언되고

퍼블릭클래스일경우에 생상자도 퍼블릭생성자가 자동으로 선언된다.


protected

protected는 상속을 받는 클래스의 접근을 허용하는 지시자이다.

상속으로 인해 접근제어자가 protected로 선언된 변수는 상속된 클래스의 변수가되어

상속받는클래스는 상속하는 클래스의 변수에 접근이 가능해진다.



 publicprotecteddefaultprivate
같은 패키지, 같은 클래스허용허용허용허용
같은 패키지, 상속 관계허용허용허용불용
같은 패키지, 상속 관계 아님허용허용허용불용
다른 패키지, 상속 관계허용허용불용불용
다른 패키지, 상속 관계 아님허용불용불용불용




'Java' 카테고리의 다른 글

상속  (0) 2017.02.25
캡슐화  (0) 2017.02.25
static  (0) 2017.02.25
생성자  (0) 2017.02.25
메소드 오버로딩(overloading)  (0) 2017.02.25

static 변수


static 변수는 하나만 존재하여 인스턴스간에 공유가 된다.


static 으로 선언된 변수는 메모리 공간에 하나만 존재하며,

어디서나 접근이 가능한 변수이다.

단어디서나 접근이 가능하려면 static 변수도 public 으로 선언되어야 한다.


static 변수가 초기화되는 시점은 JVM에 의해서 클래스가 메모리 공간에 올라가는 순간이다.

때문에 static 변수를 생성자를 통해서 초기화해서는 안된다

생성자를 통해 초기화를 하면 인스턴스가 생성될 때마다 새로운 값이 대입되게 된다.


static 변수는 static 블럭에서 초기화 하는것이 세련된 문법이다.


static 메소드


static 변수와 마찬가지로 static 메소드가 삽입된 클래스의 모든 인스턴스로부터 접근이 가능하다.

인스턴스를생성하지 않아도 static 메소드를 호출할수 있다.

static 메소드는 인스턴스 변수에 접근이 불가능하다.


static은 상태가 존재하지 않는클래스 / 인스턴스 생성의 가치가 없는 클래스에 사용하는것이 적합하다.


'Java' 카테고리의 다른 글

상속  (0) 2017.02.25
캡슐화  (0) 2017.02.25
접근제어자  (0) 2017.02.25
생성자  (0) 2017.02.25
메소드 오버로딩(overloading)  (0) 2017.02.25

  

생성자

 

자바의 인스턴스 생성시에는 반드시 생성자가 호출되어야 합니다. 


생성자는 인스턴스 생성시 딱 한번 호출되는 메소드로써 

인스턴스 변수의 초기화를 목적으로 정의되는 메소드이다.

 

생성자가 되기 위해서는 다음의 조건을 갖춰야한다

-클래스의 이름과 동일한 이름의 메소드

-반환형이 선언되어 있지 않으면서,반환하지 않는 메소드


클래스에는 반드시 생성자가 존재해야 한다 따라서 프로그래머가 생성자를 삽입하지 않으면

자바 컴파일러가 생성자를 대신 삽입해주는데 이렇게 삽입되는 생성자를 디폴트생성자 라한다 

매개변수가 있는 생성자가 있을 때는 자동으로 기본 생성자를 만들어주지 않는다.

따라서 매개변수가 있는 생성자가 있을시에는 기본생성자를 추가해줘야 한다.

 

생성자는 private으로 선언되면 클래스 내부에서만 호출이가능하기때문에

일반적으로 default와 public으로 선언이 된다.

생성자는 멤버변수에 대입되는 값이 없으면 int 타입일경우 0 객체타입을경우 null 로 초기화한다.

'Java' 카테고리의 다른 글

상속  (0) 2017.02.25
캡슐화  (0) 2017.02.25
접근제어자  (0) 2017.02.25
static  (0) 2017.02.25
메소드 오버로딩(overloading)  (0) 2017.02.25
메소드 오버로딩 overloading

매개변수의 숫자에 따라서 같은 이름의, 서로 다른 메소드를 호출한다.
이름은 같지만 시그니처는 다른 메소드를 중복으로 선언 할 수 있는 방법을 
메소드 오버로딩(overloading)이라고 한다.

-- 매서드 오버로딩의 조건
- 메서드의 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
  (리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

메소드 오버로딩 예제

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
31
32
33
34
35
36
public class Addressbook 
{
    public static void main(String[] args)
    {
        person("홍길동",01011111111,1212,"aa@aa");
        person("홍길동",01011111111,1212);
        person("홍길동",0101111111);
    }
 
    public static void person(String name,int phoneNum,int birth,String mail)
    {
        //이름 전화번호 생일 메일을 출력하는 메소드
        System.out.println("이름 : "+name);
        System.out.println("전화번호 : "+phoneNum);
        System.out.println("생일 : "+birth);
        System.out.println("이메일 : "+mail);
    }
    
    public static void person(String name,int phoneNum,int birth)
    {
        //이름 전화번호 생일을 출력하는 메소드
        System.out.println("이름 : "+name);
        System.out.println("전화번호 : "+phoneNum);
        System.out.println("생일 : "+birth);
        
    }
    public static void person(String name,int phoneNum)
    {
        //이름 전화번호를 출력하는 메소드
        System.out.println("이름 : "+name);
        System.out.println("전화번호 : "+phoneNum);
        
    }
 
}
 
cs


'Java' 카테고리의 다른 글

상속  (0) 2017.02.25
캡슐화  (0) 2017.02.25
접근제어자  (0) 2017.02.25
static  (0) 2017.02.25
생성자  (0) 2017.02.25

+ Recent posts