IT/Daily Record

[Java 2015.01.28 수] 클래스, 객체(인스턴스), 추상화, 상속, 접근 제한자 (private), 생성자, this, final, method 오버라이딩

바바옄 2015. 4. 7. 23:45
반응형

클래스

 

속성

- 멤버변수 == 인스턴스 변수

- 얼굴, 다리 , 꼬리, 소리 갯수

 

기능

- method == 인스턴스 method, 클래스 method (구분 짓는 방법 : static)

- static 이 붙은 것은 객체화 시키지 않아도 됨

 

객체

- 클래스를 실체화 시켜 놓은 것

- 클래스를 객체(인스턴스)화 시킨다.

- 객체 == 인스턴스

 

사과장수

구매자에게 사과를 파는 행위(1. 클래스-seller)

속성 - 사과,

 

구매자 - 판매자에게 사과를 사는 행위(2. 클래스-buyer)

속성 - , 사과

 

사과가 떨어 지면 입고시켜주는 행위

속성 - 사과,

 

판매자와 구매자를 연결시켜주는 행위(클래스- mart)

속성 - 판매자, 구매자

 

마트가 여러개 있음(클래스 - 시장)

시장에는 마트만 존재 다른 속성이 필요 없음(마트에 다 있으므로)

 

실제로 구현하기 쉽지 않음 -> 끊임없이 고민(구조화)해봐야 됨.. 객체가 뭐일까...

 

-> 코딩 해보려니 깐 안되.. 잘못된 도출.. 다시 생각해봐..  -> 절차지향언어 생각 버려야 되..

 

* refactoring

- C 처럼 만들어진 자바파일 하나를 구조적으로 하나씩 분리시키는 것-쉽지 않음)

  

* java 기술 면접

- 객체지향이 뭐냐? 객체, 상속, 정보은닉, 캡슐화, 추상화, 다형성을 지원하는 언어입니다.

 

추상화

1. 얼음을 간다.

2. 우유를 넣는다.

3. 팥을 넣는다

3. 토핑을 한다.

만든다 method를호출하면 1,2,3,4를 차례로 실행하는 것

 

상속

- 클래스 간의 트리 조를 만들기 위한 수단

- C 클래스 - (상속-C클래스 포함)D - (상속- D 클래스 포함)E

 

reference type 들은 new를 사용해 인스턴스(객체)화 시켜야 함

 

method 오버로딩

- 똑같은 method 인데 파라미터(매개변수)가 다른 것

 

method 오버라이딩

- 상속 관계에서 상속받은 서브 클래스에서 재구현한 것

 

final

한번만 데이터를 넣을 수 있음, 절대 값 못 바꿈, 제일 위에 씀

-  final이 붙으면 변수 명은 모조리 대문자 사용 해야 함

 

Class의 접근 제한자 (private)

- 모든 멤버변수는 이유 불문하고 pribate 접근 제어 지시자를 가진다.

- private 접근 제어 지시자를 가지는 멤버변수는 setter/getter를 통해 접근한다.

- setter/getter 가 필요한 이유 -> 고의적인 값 변경을 막기 위한 Filter

 

getter, setter

- vaildation check를 위해

- setName, getName 이름 절대 바꾸지마, 이렇게 사용해야 함 나중에 스프링에서 고생함

 ex)

public String getName(){

                          

if(this.name == null)  // null check를 위해

                 return " ";                         

return this.name;

 

기본적으로 정보은닉이 되어야 함 -> 멤버변수에 private 붙여줘야 되 -> 악의적인 편집을 막기 위해

-> 접근하기 위해 getter, setter 만듬 -> setter에 필터링 걸어서 악의적인 편집 방지, getter를 통해 데이터를 가져 올 수 있음

 

public Dog(String name, String sound){

this.name = name;  // setName(name);를 사용해!!

this.sound = sound;

}

 

getter, setter 자동 생성

source -> generate getters and setters 

 

method는 똑같은 이름의 똑같은 매개변수 가진 것을 만들 수 없으나, 생성자는 가능하다.

 

this 사용하는 이유

파라미터로 넘어온 이름과 구분 짓기 위해

- 파라미터(매개변수) 이름이 다르면 this 사용 안 해도 됨.

public Dog(String name){

     this.name = name;

}

 

public Dog(String n){

     name = n;

}

  

생성자

- 리턴 타입이 클래스인 무명 메소드

- 파라미터가 없는 생성자를 기본으로 생성한다. , 파라미터가 존재하는 생성자를 만들 때엔 기본 생성자는 사라진다.

- 기본 생성자 추가 생성 필요

- new키워드를 만나고 뒤에 클래스명과 ()를 만났을 때 호출

- 오버로딩이 가능해서 여러 개 생성자 가능

- 생성자도 private이 가능

 

스캐너, 랜덤 -> 클래스와 동일한 이름의 method 제공 -> 생성자 -> 디폴트 생성자를 만들어주기 때문에

만들지 않아도 가능

 

primitive type (정수, 실수, 문자, 논리)

값을 저장

정수: byte, short. *int, long,

실수: *double, float,

문자: char,

논리: *boolean- 정말 많이 쓰임

 

reference type

- 메모리 주소를 저장

- 인스턴스의 값이 바뀔 수 있음

 

toString 

- 모든 레퍼런스 타입에서는 .toString을 호출하게 되어있음

- 각 클래스 내부에 모든 값을 저장하고 있는 toString이라는 메소드가 내부 선언되어 있음.

한 클래스에서 다른 클래스의 값을 가져올 때 값이 너무 많을 경우 하나 하나 가져오기 귀찮아서

- 임의의 toString 함수를 생성하여 다른 클래스에 있는 원하는 값들을 받아 올 수 있음

 

public String toString(){

             String result = "";

             result +=this.name + "\n";

             result +=this.sound;

             return result;

} 

 

 

 

반응형