본문 바로가기
자바 JAVA

23.01.16 (상속과 다형성)

by 2023코딩시작 2023. 1. 16.

 

package: interface~ plymorphism(다형성)~access~final~model~packages~exception

 

// 클래스안에서 퍼블릭은 한 번 밖에 못씀. 그래서 메인 메서드에 쓴다.

 

/*
 * 인터페이스(Interface)?
 * 1. 완벽한 추상화를 제공한다.
 *    ==> - 일종의 추상클래스. 하지만 추상클래스보다 추상화 정도가 더 높다.
 *        - 실제 구현된 것이 전혀 없는 기본 설계도(알멩이 없는 껍데기).
 *        - 추상메서드(알멩이 없는 껍데기)와 상수만을 멤버로 갖는다.
 *        - 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용이 됨.
 *        - 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용이 됨 ==> 명세서.
 * 2. 모든 메서드가 추상화(추상메서드)이다. // 이 때 추상클래스 대신 인터페이스를 사용한다.
 * 3. 프로젝트 진행 시 표준 규약에 따른다.
 *    ==> 추상 클래스보다 더 많이 사용이 됨.
 * 4. 인터페이스는 상수와 추상메서드로만 구성이 되어 있음.
 * 5. 모든 변수는 상수가 된다.
 *    예) public static final 로 인식을 함.
 * 6. 모든 메서드는 추상메서드가 된다.
 *    예) public abstract 로 인식을 함.
 * 7. 인터페이스는 객체 생성이 불가능함.
 * 8. 자식클래스로 상속을 하여 자식클래스에서 객체를 생성.
 *    ==> 인터페이스의 추상메서드는 반드시 재정의(강제성이 부여됨).
 * 9. 인터페이스는 다중 상속을 제공함.
 * 10. class -> interface 키워드 사용.
 *     extends -> implements 키워드 사용.
 *     
 * ※ 인터페이스 사용 목적 : 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 
 *     클래스의 규격 선언이며, 클래스의 다형성을 실현하는 도구임.
 * [인터페이스 장점]
 * 1. 개발 시간을 단축할 수 있음.
 * 2. 표준화가 가능함  
 */

 

//인터페이스는 객체생성이 불가능
//Inter inter = new Inter();   (X)

 

//stactic final 상수로 인식을 함.
// 상수 값을 변경하는 것은 불가능
// sub.num = 350; -- error발생 // ctrl + space 눌렀을 때 => S F (Static Final)==> 상수 / 값을 변화시킬 수 없다.

 

// 인터페이스에서 인터페이스 상속을 받을 때는 extends를 씀

// 클래스에서 인터페이스 상속을 받을 때는 implements를 씀

 

 

 

 

/*
 * 다형성(Polymorphism)?
 * - 객체지향 프로그램의 4대 특징 중 하나. - 상속과 연관성이 많음.
 * - 다형성의 사전적 의미 
 *   ==> 같은 종의 생물이지만 모습이나 특징이 고유의 성질을 가지고 있는 것을 말함.
 * - 여러가지 모습으로 해석될 수 있는 형태를 말함.
 * - 여러가지 형태를 가질 수 있는 능력을 말함.
 * - 하나의 메서드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것.
 * - 하나의 사물(객체)을 다양한 타입으로 선언하고 이를 이용할 수 있는 성질.
 * - 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것.
 *   ==> 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성의 특징
              .  // ex. Animal dog = new Dog();
 *       단, 조상클래스에서 상속을 받는 멤버들만 접근할 수 있고, 자손클래스에서 만들어진 멤버들에는 접근을
       할 수 없음.
 *       예) 조상타입의 참조변수로 자식의 멤버를 호출.
 * - 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만, 
 *   반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없음.
 * - 다형성을 사용하는 이유
 *   1. 다른 동물을 추가하는 경우.
 *   2. 상속과 메서드 재정의를 활용하여 확장성 있는 프로그램을 만들 수 있음.
 *   3. 그렇지 않는 경우 많은 if-else if문이 구현되고 코드의 유지보수가 어려워짐.
 *   4. 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현.
 *   5. 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있음.
 */

 

 

/*
 * 접근지정자(접근제어자) 권한
 * - 접근지정자는 클래스, 멤버변수, 멤버메서드 앞에 사용이 됨.
 * - 외부로부터 접근을 제어한다는 의미를 가지고 있음.
 * - 접근지정자가 사용될 수 있는 곳 : 클래스, 멤버변수, 멤버메서드, 생성자
 * - 이들 접근지정자 중 protected, private 접근지정자는 클래스 앞에는 사용을 못 함.
 *   단, Inner Class 앞에는 사용이 가능함.
 *   
 * 1. private : - 동일한 클래스에서만 접근이 가능함.
 *              - 외부에서 인스턴스 변수를 바로 접근이 가능하게 제어를 하면 잘못된 데이터를 저장할 수 있는 문제가 
                  발생함.
 *              - 따라서 직접 접근을 제어하고 메서드(setter(), getter()) 를 사용하여 접근하게 함.
 *  
 * 2. default : - 동일한 패키지에서만 접근이 가능함. default 키워드는 생략이 가능함.
 *              - 같은 클래스의 멤버, 같은 패키지 안의 다른 클래스의 멤버까지만 접근이 가능함.
 *              - 다른 패키지의 상속 관계에 있는 클래스라도 접근 불가.
 *              
 * 3. protected : - 같은 클래스의 멤버, 같은 패키지 안의 다른 클래스의 멤버, 
 *                         다른 패키지의 상속 관계에 있는 멤버까지 접근이 가능함.
 * 
 * 4. public : - 모든 클래스에서 접근이 가능함.
 *             - 같은 클래스의 멤버, 같은 패키지 안의 다른 클래스의 멤버, 
 *               다른 패키지의 상속관계에 있는 멤버, 다른 패키지의 클래스의 멤버까지 접근이 가능함.
 *               
 * - 접근 범위(scope) : public > protected > default > private
 */

 

 

 

/*
 * final 지정자
 * - 클래스나 멤버변수, 멤버메서드에 적용해서 사용함.
 * - 클래스 : - 변경할 수 없는 클래스, 확장될 수 없는 클래스.
 *           - final로 지정된 클래스는 다른 클래스의 조상 클래스가 될 수 없음.
 * - 멤버메서드 : - 변경될 수 없는 메서드.
 *              - final로 선언된 메서드는 오버라이딩을 통해서 재정의를 할 수 없음.
 * - 멤버변수 : - 변수명 앞에 final 이라는 키워드가 붙으면 값을 변경할 수 없음. ==> 상수화
 *              
 * - 대표적인 final 클래스는 String 클래스와 Math 클래스임.
 */

 

 

/*
 * ★★★★★★★★★★★★★★★★★★★★★★★★
 * 자바 빈(java bean)?
 * - DB에 접근하여 테이블의 특정 컬럼(속성)에 값을 저장하거나 저장된 값을 가져올 때 사용하는 클래스.
 * - Java Bean == DTO(Data Transfer Object) == VO(Value Object)
 * - 구성요소
 *   1. 멤버변수 - DB 컬럼명 : 접근지정자(private)
 *   2. setter() : 지정자 메서드.
 *   3. getter() : 획득자 메서드.
 */

 

 

 

/*
 * 패키지(package)?
 * - 서로 연관성이 있는 클래스들과 인터페이스들의 묶음을 말함.
 * - 패키지는 물리적으로 폴더 개념과 유사함.
 *   패키지는 서브 패키지를 가질 수 있으며, "." 으로 구분함.
 * - import 키워드 : 현재 패키지의 클래스에서 다른 패키지에 있는 다른 클래스를 사용하고 싶은 경우 
 *                             import해야 한다.(단, 동일한 패키지에 있는 다른 클래스를 사용할 경우에는 생략 가능)
 *   형식) import 패키지명.서브패키지명.클래스명;
 * - import 단축 키 : ctrl + shift + O
 */

스캐너 만들때처럼 중간까지만 치고 ctrl + space 쳐서 import생성하는게 편함

 

 

 

// 회원의 정보를 저장해보자 ==> set메서드

// 저장된 회원의 정보를 화면에 출력해보자. ==> get메서드

 

 

 

/*
 * 에러(error)
 * - 하드웨어의 오동작 또는 고장으로 인한 오류.
 * - 에러가 발생하면 프로그램 종료.
 * - 정상 실행 상태로 돌아갈 수 없음.
 * 
 * 예외(exception)
 * - 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 오류.
 * - 예외가 발생하면 프로그램 종료.
 * - 예외 처리를 추가해 주면 정상 실행 상태로 돌아갈 수 있음.
 * - 프로그램을 위한 보험 처리. 위험한 상황에서 다른 코드를 보호하는 장치.
 * 
 * 예외의 종류
 * 1. 일반(컴파일) 예외
 *    - 예외 처리 코드가 없다면 컴파일이 되지 않는 예외.
 * 2. 실행 예외
 *    - 예외 처리 코드를 생략하더라도 컴파일이 되는 예외.
 *      즉, 컴파일 하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말함.
 *    - 경험에 따라 예외 처리 코드를 작성할 필요가 없음.
 * 
 * 예외 처리의 목적
 * - 프로그램을 실행 시 발생할 수 있는 상황들을 미리 정해 놓고, 
 *   예외가 발생했을 경우에 대비하는 코드를 작성하여 프로그램이 정상적으로 작동하도록 하기 위함.
 */

 

/*
 * 예외 처리
 * - 실행 시간에서 발생한 예외(오류)를
 *   프로그램으로 처리한다는 의미.
 *   
 * - 관련 키워드
 *   1. try ~ catch ~ finally 블럭
 *   2. throws 키워드
 */

/*
 * 1. try ~ catch ~ finally 블럭
 * 
 *    형식)
 *     try {
 *     예외가 발생할 가능성이 있는 코드;
 *     }catch(예외클래스 참조변수) {
 *     예외가 발생한 경우 실행되는 코드;
 *     참조변수 : 예외와 관련된 정보를 넘겨받는 변수. 
 *     }finally {
 *     // 생략도 가능함.
 *              예외와 상관없이 실행되어야 하는 코드;
 *     }
 */

예외 클래스 ==> Exception 넣으면 됨

finally {
// 입출력과 관련된 데이터를 처리하는 코드
sc.close();
}
/*
 * 다중 catch문
 * - catch 문을 여러 개 사용하여 처리하는 방식.
 * - catch 문은 순차적으로 위에서 아래로 실행이 됨.
 * - 주의) 예외를 처리하는 가장 최상위의 Exception클래스는 맨 마지막에 나와야 함.
 *        (만약 맨 첫줄에 나오는 경우, error 발생)
 */
*
 * printStackTrace();
 * -에러메세지의 발생생 원을 찾아서 단계별로 에러를 출력해주는 메서드
 */

ex)
try{
       System.out.println("str2 문자열 길이 >> " + str2.length());
}catch(Exception e) {
     e.printStackTrace();
}
/*
 * throws 키워드
 * - 예외 처리를 위임시키는 명령어
 *   형식) 메서드명 throws 예외처리클래스 {   }
 * - throws로 지정된 메서드를 호출할 경우 메서드 내에서 예외가 발생하면
 *   해당 예외를 메서드가 호출한 곳으로 위임시켜서 예외를 처리하는 방법
 */

EX) 메서드명 throw Exception 으로 떠넘기고 빨간줄 뜨면 surround with try/catch눌러서 실행

'자바 JAVA' 카테고리의 다른 글

23.01.18 (기본 클래스)  (0) 2023.01.18
23.01.17 (추상 클래스)  (0) 2023.01.17
23.01.13 (클래스와 객체)  (0) 2023.01.13
23.01.12 (클래스와 객체)  (0) 2023.01.12
23.01.11 (클래스와 객체)  (0) 2023.01.11

댓글