본문 바로가기

IT코딩공부!

#11 this, super, final 개념 정리 (+ 오라클 설치)

[0] 자바 마지막 공부!!

    // 변수 : 변하는 수
    int num = 10;

    // 상수 : 변하지 않는 수를 의미 (대문자 사용, final 추가)
    final int NUM = 100;

    // this : 현재 클래스의 필드값
    // super : 상속받은 클래스의 필드값
    // final : 더 이상 수정할 수 없는, 마지막이라는 의미

    public static void main(String[] args) {

        // 객체 생성
        _01_final fin = new _01_final();

        // 변수값 변경
        fin.num = 50;

        System.out.println("num의 값은 : " + fin.num);

        // 상수값 변경
//        fin.NUM = 500;
        // NUM은 final 지정했기 때문에 값을 바꿀수 없다.
        
    }

// 상수 값은 어디서 사용하든 변하지 않는 값이다


[1] 상속예제 개념

// (1)Phone이라는 추상클래스를 만든다!! // 오버라이드 지정할때 무조건 toString() xx >> phone.size, phone.price ( reture값 지정해주기!!)

public abstract class Phone {

    String size;
    String price;


    // 추상메소드
    public abstract  void  OS();
    public abstract  void  Tongsinsa();
    public abstract  void  Accessory();

    @Override
    public String toString() {
        return "모델 = {" +
                "size=" + size +
                ", price=" + price +
                '}';
    }
}

// (2) Apple이라는 클래스를 만들고 Phone이라는 부모클래스를 상속한다.

// 상속 기억!!!

public class Apple extends Phone
public class Apple extends Phone{

    @Override
    public void OS() {
        System.out.println("IOS 입니다");
    }

    @Override
    public void Tongsinsa() {
        System.out.println("LGU+ 입니다");
    }

    @Override
    public void Accessory() {
        System.out.println("카드지갑");
    }
}

// (2) Samsung이라는 클래스를 만들고 Phone이라는 부모클래스를 상속한다.

public class Samsung extends Phone
public class Samsung extends  Phone{
    @Override
    public void OS() {
        System.out.println("안드로이드 입니다");
    }

    @Override
    public void Tongsinsa() {
        System.out.println("SKT 입니다");
    }

    @Override
    public void Accessory() {
        System.out.println("투명케이스");
    }
}

// (2) Huawei이라는 클래스를 만들고 Phone이라는 부모클래스를 상속한다.

public class Huawei extends Phone
public class Huawei extends Phone{
    @Override
    public void OS() {
        System.out.println("안드로이드 입니다.");

    }
    @Override
    public void Tongsinsa() {
        System.out.println("KT 입니다");
    }
    @Override
    public void Accessory() {
        System.out.println("캐릭터케이스");
    }
}

// (3) PhoenMethod이라는 클래스를 만들고 코드를 간결하게 해주게 util코드를 만들어준다

public class PhoneUtil  //상속 안됨!!
public class PhoneUtil {

    public void PhoneMethod(Phone phone){
        System.out.println(phone);
        phone.OS();
        phone.Tongsinsa();
        phone.Accessory();
    }
}

// (4) PhoneMain이라는 클래스를 만들고 출력문 선언해준다.

public class PhoneMain {
    public static void main(String[] args) {

        Apple apple = new Apple();
        Huawei huawei = new Huawei();
        Samsung samsung = new Samsung();
        PhoneUtil Util = new PhoneUtil();


        System.out.println((1));
        apple.size = "6.1\"";
        apple.price = "1500000";
        System.out.println(apple);
        apple.OS();
        apple.Tongsinsa();
        apple.Accessory();
        System.out.println();

        huawei.size = "6.5\"";
        huawei.price = "1550000";
        System.out.println(huawei);
        huawei.OS();
        huawei.Tongsinsa();
        huawei.Accessory();
        System.out.println();

        samsung.size = "6.8\"";
        samsung.price = "1580000";
        System.out.println(samsung);
        samsung.OS();
        samsung.Tongsinsa();
        samsung.Accessory();
        System.out.println();

        System.out.println((2));
        Phone phone = null;
        phone = new Apple();
        phone.OS();
        phone.Tongsinsa();
        phone.Accessory();
        System.out.println();


        System.out.println((3));
        System.out.println("Apple");
        apple.size = "6.1\"";
        apple.price = "1500000";
        Util.PhoneMethod(apple);
        System.out.println();

        System.out.println("Huawei");
        huawei.size = "6.5\"";
        huawei.price = "1550000";
        Util.PhoneMethod(huawei);
        System.out.println();

        System.out.println("Samsung");
        samsung.size = "6.8\"";
        samsung.price = "1580000";
        Util.PhoneMethod(samsung);
    }
}

// (1) 객체생성방법 // (2) 자동타입변환 방법 // (3) 유틸클래스 사용방법  ( 기억하기!)

// 출력

출력값 확인


[2] 인터페이스 개념

public interface RemoteControl
 [1] 인터페이스 구조

    public interface 인터페이스이름 {

        // 필드
        public static final 데이터타입 상수이름 :

        // 메소드   >> 중괄호와 세미클론!!!
        public abstract 데이터타입 메소드이름();

    }

    [2] 인터페이스 특징
     - 인터페이스는 누구나 접근이 가능하도록 public 설정
     - 객체의 다형성 구현하는데 용이
     - 인터페이스의 구성요소
        (1) 상수필드
         : 일반적인 필드로 선언해도 컴파일 과정에서 static final 자동으로 붙음(클래스와 다른점)
         : ex) int num = 10;   >> static final int num = 10;

        (2) 추상메소드
         : 일반적인 메소드를 선언해도 컴파일 과정에서 abstract 자동으로 붙음
         : { 구현부 } 없이 메소드 이름만 선언하고 세미콜론(;)을 작성한다.

        (3) defoult메소드 >> 인터페이스에서 무조건 사용!!! 해야만 메소드를 사용가능!!
         : { 구현부 } 를 가지는 메소드
         : 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위함

        (4) static메소드
         : 인터페이스를 객체화 하지 않고도 직접 호출 가능

      - 부모클래스 객체  = new 자식클래스();
        인터페이스 객체  = new 구현클래스();
      -
      - interface >> interface로 : extends 사용
        interface >> class로 : implements 사용(여러개 사용가능)


     */

// (1) 상수필드

    // (1) 상수필드 : static을 사용하지 않아도 자동으로 붙음
    int MAX_VOLUME = 50;
    int MIN_VOLUME = 0;

// (2) 추상메소드

    // (2) 추상메소드 : abstract를 사용하지 않아도 자동으로 붙음
    // interface와               class 비교
    void turnOn();              // abstract  void turnOn();
    void turnOff();             // abstract void turnOff();
    void setVolume(int volume); // abstract void setVolume(int volume);

// (3) default메소드

    // (3) default 메소드
    public default void  setMute(boolean mute){
        if(mute){
            System.out.println("음소거");
        } else {
            System.out.println("음소거 해체");
        }
    }

// (4) static메소드

    // (4) static메소드
    public static void changeBattery(){
        System.out.println("건전지 교체");
    }
}

// smartTv를 상속 받기 위한 internetSearch 인터페이스를 만들어준다

public interface internetSearch
public interface internetSearch {

    // 추상메소드
    void search(String url);

}

 

// implements 상속(인터페이스 상속) Audio 클래스생성

// 1. 필드선언 2. 추상메소드 오버라이딩 생성(재정의)

public class Audio implements RemoteControl
// RemoteControl 인터페이스 상속
public class Audio implements RemoteControl{

    // 필드 선언
    private int volume;

    // 추상메소드 오버라이딩 생성 (재정의) : 인터페이스에서 선언한 추상메소드를 재정의한다.
    @Override
    public void turnOn() {
        System.out.println("오디오 전원을 켭니다. ");
    }

    @Override
    public void turnOff() {
        System.out.println("오디오 전원을 끕니다. ");
    }

    @Override /// 인터페이스라는 객체 생성 없이도 사용가능!!!
    public void setVolume(int volume) {
        if (volume >= RemoteControl.MAX_VOLUME){
            this.volume = RemoteControl.MAX_VOLUME;
            // volume : 우리가 입력한 불륨값
            // this.volume : 클래스에서 선언해준 필드값(실제 저장될 불륨값)  필드값 : 10
        } else if(volume <= RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 오디오 볼륨 : " + this.volume);
    }

    @Override
    public void setMute(boolean mute) {
        if(mute){
            System.out.println("오디오를 음소거 합니다.");
        } else {
            System.out.println("오디오의 음소거를 해체합니다.");
        }
    }
}

// implements 상속(인터페이스 상속) Television 클래스 생성

// 1. 필드선언 2. 추상메소드 오버라이딩 생성(재정의)

public class Television implements RemoteControl
public class Television implements RemoteControl {

    private int volume;

    @Override
    public void turnOn() {
        System.out.println("티비 전원을 켭니다. ");
    }

    @Override
    public void turnOff() {
        System.out.println("티비 전원을 끕니다. ");
    }

    @Override
    public void setVolume(int volume) {
        if (volume >= RemoteControl.MAX_VOLUME){
            this.volume = RemoteControl.MAX_VOLUME;
        } else if(volume <= RemoteControl.MIN_VOLUME){
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 티비 볼륨 : " + this.volume);
    }

    @Override
    public void setMute(boolean mute) {
        if(mute){
            System.out.println("티비소리를 음소거합니다.");
        } else {
            System.out.println("티비소리를 음소거해체합니다.");
        }
    }
}

// smartTv 클래스 생성

// implements 상속(인터페이스 상속)  RemoteControl, internetSearch

// 1. 필드선언 2. 추상메소드 오버라이딩 생성(재정의)

public class smartTv implements RemoteControl, internetSearch
public class smartTv implements RemoteControl, internetSearch{

    int volume;


    @Override
    public void turnOn() {
        System.out.println("tv 전원 on");
    }

    @Override
    public void turnOff() {
        System.out.println("tv 전원 off");
    }

    @Override
    public void setVolume(int volume) {
        if (volume >= RemoteControl.MAX_VOLUME){
            this.volume = RemoteControl.MAX_VOLUME;
        } else if(volume <= RemoteControl.MIN_VOLUME){
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 티비 볼륨 : " + this.volume);
    }

    @Override
    public void setMute(boolean mute) {
        if (mute) {
            System.out.println("티비소리를 음소거합니다.");
        } else {
            System.out.println("티비소리를 음소거해체합니다.");
        }
    }

    @Override
    public void search(String url) {
        System.out.println(url + "에서 내용을 검색합니다.");
    }
}

// RmoteMain 클래스 생성

public class RmoteMain
/*
(1) 전원 on
(2) 볼륨 50 or -5
(3) 음소거
(4) 음소거 해체
(5) 전원 off
*/

// 1. 객체생성방법(오디오)

        // 1. 객체생성방법(오디오)
        Audio audio = new Audio();

        System.out.println("(1)객체생성 방법");
        audio.turnOn();
        audio.setVolume(50);
        audio.setMute(true);
        audio.setMute(false);
        audio.turnOff();
        System.out.println();

// 2. 자동타입변화(tv)

        // 2. 자동타입변화(tv)
        System.out.println("(2)자동타입변화 방법");
        Television television = null;

        television = new Television();
        television.turnOn();
        television.setVolume(-5);
        television.setMute(true);
        television.setMute(false);
        television.turnOff();

// 3. smartTv 인터페이스 두개 사용해서 출력

        // 두가지 인터페이스를 이용해서 사용가능
        smartTv smartTv = new smartTv();
        smartTv.turnOn();
        smartTv.setVolume(7);
        smartTv.setMute(true);
        smartTv.setMute(false);
        smartTv.search("네이버");
        smartTv.turnOff();

// 출력


[3] (*) 다이아몬드로 만들기

import java.util.Scanner;

public class Diamond {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("다이아몬드의 크기를 입력하세요(홀수): ");
        int size = input.nextInt();
        
                if (size % 2 ==1){
            System.out.println("게임시작");
            for (int i = 0; i < size; i++) {
                for (int j = 0; j < size - i; j++) {
                    System.out.print(" ");
                }
                for (int k = 0; k < 2 * i + 1; k++) {
                    System.out.print("*");
                }
                System.out.println();
            }

            for (int i = size - 2; i >= 0; i--) {
                for (int j = 0; j < size - i; j++) {
                    System.out.print(" ");
                }
                for (int k = 0; k < 2 * i + 1; k++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        } else {
            System.out.println("다시 적으세요");
        }

    }
}

//출력


+

// SQL 설치

sqlplus "/ as sysdba"  검색해서 치면 서버가 설치된걸 볼수 있다.