본문 바로가기

Dev/[Java]

[JAVA] 3. ObjectOrientedProgramming(OOP), 예외처리

반응형

 

Exception 만드는 법..

 

 

 

 

 

 

 

 

너무 빠르게 나가셔서 정리를 못했다..

추후에 재정리 예정,

 

 

 

Abstraction

-Java에서의 Abstraction

- 실 세계의 객체를 프로그래밍 관점에서 관심의 대상이 되는 속성과 행동을 추출해 내는 것을 의미한다.

 

Abstraction의 결과 -> Class

 

Class : Member Variable + Member Method

속성 : Class의 Member Variable

행동 : Class의 Member Method

 

Class

- 클래스는 추상화 된 대상이 이러이러한 속성과 행동을 가진다 라는 것을 정의한 설계이지, 실제로 값을 가진 객체가 아니다.

- 실제로 값을 갖는 객체는 new 라는 키워드를 이용해서, 클래스 정의에 해당하는 내용으로 할당되어져 이용함

 

그러니까 C나 C++에서와 같다. 구조체 생성했다고 해서 그 구조체를 그냥 갖다가 쓸 수 있는게 아니라,

그 구조체 type의 변수를 하나 생성해야지만 사용할 수 있다.

 

캐릭터 포인터를 그냥 선언했다고 해서 그냥 쓰는게 아니라.

여기에 malloc을 해줘서 사용한다 라는 것과 비슷하다고 생각하면되겠따.

 

 

Java의 package

:패키지명은 통념상 소문자로 만든다.

한 자바 소스에서 단 한번만 쓸 수 있다

관련 있는 클래스를 묶어주는 역할을 한다.

 

 

Java의 import 

: 서로 다른 패키지에 있는 클래스를 참조하기 위해 어느 패키지에 있는 클래스인지? 선언해주는 역할..

같은 패키지 내에서는 필요가 없다.

import 할 때 *보다는 명시적으로 넣어주는게 좋다.

API에서 제공하는 것을import하는 소스코드와 개발자들이 만든 패키지를 import 하는 경우 한칸 띄우던지 해서 구분이 가능하도록 하는게 좋다.

 

 

OOP의 특징

Encapsulation

: Information hiding : Getter/Setter 사용하여야지만 변수에 접근하도록..

 

생성자의 역할은

멤버변수를 초기화 하는데 쓰인다.

특징은 리턴타입 없다.

상속되지않는다.

클래스 이름과 같아야한다.

객체 생성시 new라는 키워드 만나면 호출된다.

생성자 없으면 자동생성해준다.

사용자가 명시적으로 만들어놓으면 자동생성 안해준다.

 

 

 

 

Inheritance

 

(잠깐 딴얘기)

Refactoring이라는 개념은 Martin Fowler 가 만들었따.

이클립스 만든사람과 VS code만든사람이 같다.(Erich gamma)

이클립스 만들때 Kent Beck 이랑 같이만듬

스프링 만든사람?( Rod Johnson)

 

이렇게 슈퍼클래스 만들 클래스를 선택한 후에 Refactoring -> Extract Superclass 하면, 상속되는 코드가 자동 삽입되고 Super 클래스가 생성된다.

 

 

 

상속할 때,

부모클래스에 기본생성자 없으면 자식 클래스에서 상속못받는다.

 

자식클래스에서 동명의 메서드가 각각의 역할대로 선언/정의 되어있을때

부모클래스에서는 함수원형만 사용하고 abstract 붙이면 된다.

매서드 앞에도 붙이고, 클랫 앞에도 붙여야한다.

그러니까 원형은 부모클래스에 선언되어있고,

오버라이딩은 자식클래스에서 다양하게 가능

 

오버라이딩은 메서드명, 파라미터 같아야함

 

Super는 부모생성자 호출

 

상속의 장점

코드재사용

검증된 코드사용(오류 최소화)

관련된 여러클래스들의 공통점 통일

 

두개사실 연관별로없엉

 

overriding 할 때 접근제한자 규칙

 부모가 Public 인데자식이 Protected이면 안댄다는말

부모가 throws Exception이고

자식이 throws IOException 이면 가능

 

반대로는 불가능.

 

추상클래스

공통 구현을 상위클래스에 선언해줌

자신의 생성자로 객체 생성 불가..

(ex)

 * Employee emp = new Employee(); (x)
 * Employee mgr = new Manager(); (o)
 * Employee clerk = new MereClerk(); (o)

 

하위 클래스를 참조하여 상위 클래스의 객체를 생성

하위 클래스 제어하기 위해 사용

abstract와 final 키워드를 동시 표기 불가

 

 

인터페이스 

모든 메서드가 추상...

(추상화 정도가 추상클래스보다 높네..)

 

 

 

 

Object라는 슈퍼클래스의 toString을 오버라이딩 한것.

반응형