자바공부하기 63

 

JVM 메모리 모델

 

- 어플리케이션 프로그램을 만들 때 메모리나 어드레스 같은 낮은 수준의 사항을 너무 의식하면 안된다.

 

- 그것을 의식하지 않은 언어일수록 고급언어이며, JAVA도 그러한 고급언어에 속한다.

 

- 그러나 JAVA를 확실하게 이해하려면 메모리의 사용법을 어느정도 이해하는 것이 좋다 생각한다.

 

 

자바공부하기 62

 

생성자 예

 

public class platoon { //소대

private String name;

public Platoon() { //보통 4분대

name= "Platoon";

}

public Platoon(String name){

this.name=name;

}

public String getPlatoonName(){

return name;

}

public void showPlatoonName(){

System.out.println("The "+name+" platoon. ");

}

}

 

 

 

 

자바공부하기 61

 

생성자 예제_1

 

 

 

생성자 예제_2

 

 

 

자바공부하기 60

 

생성자

 

생정자 메서드

- 객체가 생성될 때 호출되어 실행하는 메서드

- 메서드 이지만 유일하게 리턴형이 없음

- 생성자 메서드의 이름은 클래스의 이름과 동일

- new 연산자가 호출된 직후에 호출

: new 연산자가 메모리를 생성하면 멤버변수들이 메모리를 할당받음

: 따라서 변수들에 대한 초기화 작업이 가능해짐

 

- 클래스에 기본 생성자 메서드가 없다면 컴파일러가 자동으로 생성해줌

: 컴파일러가 생성해주는 기본 생성자 메서드는 매개변수가 없고 블록이 비어있음

 

- 생성자 메서드의 사용이유

: 할당 받은 멤버변수를 초기화 할 때

: 객체가 생성되기 전의 미리 해야 할 작업이 있을 때

 

 

 

 

 

자바공부하기 59

 

private의 진정한 의미

 

Encapsulation

- 자료의 보호

- 내부적으로만 사용하기 위해

* "사과와 위 그리고 먹다(씹다)"

* 사과 : 외부 데이터

* 위 : private 변수

* 먹다() : public 메서드

* 그냥 집어넣으면 입 찢어지고 가슴 찢어짐

- 내부의 자료가 변경되어도 외부에 영향을 주지 않는다.

 

 

 

 

- 내부의 데이터 또는 로직이 변경되어도 외부에 영향을 주지 않는다.

 

- 액세서(accessor)

* getXXX(), setXXX()

 

- 데이터필드는 반드시 private으로 하고 엑세서를 경유하여 접근해야 한다.

단점은 번거롭고 소스가 엑세서에 묻힐 수 도 있다.

자바공부하기 58

 

메서드를 이용한 접근제어

- public 메서드를 이용하여 private 멤버필드에 데이터를 전달한다.

 

- private 멤버필드에 값 전달하기

: 값 입력받기

* 외부로부터 데이터를 매개변수 형태로 받아서 내부의 멤버에 전달

 

: 값 전달하기

* 메서드의 리턴을 통해서 멤버필드에 전달

 

- getXXX() , setXXX()

 

Class Test6 {

private int top_secret;

public void setMyTop(int x){

top_secret = x;

}

public int getMyTop() {

return top_secret;

}

}

public class Test6Main {

public static void main(String[] args) {

int s;

Test6 t6 = new Test6() ;

t6.setMyTop(1000);

s = t6.getMyTop();

System.out.println("private멤버의 값은: " +s);

System.out.println("private멤버의 값은: " + t6.getMyTop());

}

}

 

 

public메서드를 통한 private메서드의 접근

다음글에선 private에 대해 알아볼꺼에요 ^^

 

자바공부하기 57

접근제어

 

 

Class Father {

public int age;

public long height;

private float weight;

}

 

class Son extends Father {

float getWeight() {

return weight;

}

}

 

public class AccessControlMain {

public static void main(String[] args) {

Son son = new Son();

// Upcasting

Father son1 = son;

son1.age= 100;

son1.height = 170L;

son1.weight = 49.0F;

System.out.println("age". + son1.age);

System.out.println("height" + son1. height);

System.out.println("weight" + son1.weight);

System.out.println("weight:" + son.getWeight());

}

}

 

자바공부하기 56

 

접근제어

 

- public과 private의 차이, 그리고 protected

* 외부 공개 / 내부전용

 

- 선언된 객체 내의 변수에 값을 직접 할당할 수 없게 제어

* 객체의 메모리 생성 후의 접근이 기본

* 객체의 점(.)찍고 변수에 접근이 불가능

 

- 자료의 은폐화(Encapsulation)

* 객체의 메모리 생성 후, 객체 내의 변수에 대한 접근제어

* 상소관계에서 아버지 클래스와 아들 클래스 간의 접근제어

 

- 자바에서 아무 접근 제어자를 쓰지 않을 경우 package protected(default)로 설정

 

 

 

+ Recent posts