내일배움캠프 22일차

Drumj·2022년 5월 18일
0

내일배움캠프

목록 보기
22/80

<오늘의 학습>

Azure

오늘은 Azure에서 실제로 배포를 해보는 연습? 프로젝트를 했다.
VM,VMSS,LB 등 배운건 있는데 아직 VMSS와 LB를 연동 시키지 못해서
VM만 사용해서 배포를 했다.
배포 하는 방법은 AWS의 EC2와 비슷.. 아니 거의 똑같은 것 같다.

Filezllia에서 눈으로 보면서 업로드할 파일을 정하고 cmd를 통해서 원격 접속을 한 후에
필요한 라이브러리 다운!
저번 스파르타 강의에서 initial EC2 파일이 있어서
그걸 사용해서 아주 편하게 클라우드 컴퓨터 세팅을 완료했다.

이거 저거 둘러본 후에 nohup을 사용해서 배포 한 후에 제출!!
지금처럼 VM,EC2만 사용해서 배포하는 건 아주 쉬운데.... 로드 밸런서나 뭐시기 저시기
여러가지가 생기고 깃 액션을 사용해서 자동배포까지 하라고 하면..
바로 그냥 멘붕... 아직 클라우드 관련 수업이 많으니까 더 알아보도록 하자!

JAVA

오늘 자바는 나머지 객체지향언어 추상클래스, 인터페이스, 에러,예외 처리에 대해서 알아봤는데..
대충은 무슨 말인지 이해했다고 생각하고 퀴즈로 넘어가는 순간

아무것도 이해하지 못한 나 자신을 발견할 수 있었다...

에이 뭐,,, 아직은 그럴 수도 있지 하고 다음걸로 넘어갔는데 마찬가지로 멘붕;;

바로 처음부터 다시 알아보자고 생각하고 일단 TIL 작성중.. ㅠㅠ
이거 다 쓰고 바로 다시 돌아가서 강의를 들어봐야겠다 자바 너무 어려워~~~


  • 추상 클래스
    추상 메소드를 선언 할 수 있는 클래스를 의미하고, 상속 받는 자식 클래스 없이는 인스턴스를 생성할 수 없다는 점이 클래스와 다른 점이라고 한다.
    • 추상 메소드는 설계만 되어 있고 구현체가 없는 것이라 한다. -> {} 중괄호가 없다는 소리!
abstract class Bird{
    private int x,y,z;

    void fly(int x, int y, int z){
        printLocation();
        System.out.println("이동합니다");
        this.x =x;
        this.y =y;
        if(flyable(z)){
            this.z =z;
        }else {
            System.out.println("그 높이로는 날 수 없습니다.");
        }
        printLocation();
    }
    abstract boolean flyable(int z);
    public void printLocation(){
        System.out.println("현재위치 {"+x +","+y+","+z+")");
    }
}

abstract class Bird 이 녀석이 추상 클래스 이고
abstract boolean flyable(int z); 이 녀석이 추상 메소드, 이 줄에 위에서 말한 것 처럼 {} 가 없다!!
또 추상메소드는 {}요 부분이 자식 클래스에서 구현된다고 한다.

class Pigeon extends Bird{

    @Override
    boolean flyable(int z) {
        return z < 10000;
    }
}
class Peacock extends Bird{

    @Override
    boolean flyable(int z) {
        return false;
    }
}

여기처럼 Pigeon이라는 클래스에서 flyable이 다시 나오고 있는것을 볼 수 있다.


  • 인터페이스
    객체의 특정 행동의 특징을 정의하는 문법.
    함수의 동작을 정의하고 내용은 없다고 한다!

    interface Flyable {
    void fly(int x, int y, int z);
    }

    이런 느낌!!
    또 인터페이스를 구현하는 클래스는 인터페이스에 존재하는 함수의 내용 {} 을 반드시 구현해야 한다고 한다.

    class Pigeon implements Flyable{
    private int x,y,z;
    
    @Override
    public void fly(int x, int y, int z) {
        printLocation();
        System.out.println("날아갑니다.");
        this.x = x;
        this.y = y;
        this.z = z;
        printLocation();
    }
    public void printLocation() {
        System.out.println("현재 위치 (" + x + ", " + y + ", " + z + ")");
    	}
    }

    여기서 Pigeon 클래스가 implements로 인터페이스를 받아오고
    밑에서 fly의 내용을 구현해주는 것을 확인 할 수 있다.

    인터페이스는 상속과는 다르게 여러 개의 인터페이스를 구현할 수 있다고 한당.


  • 에러, 예외 처리
    예외 처리는 예외 발생 시 프로그램의 비정상 종료를 막기위해 사용한다고 하고
    그 방법으로는 3가지 형식이 있다고 한다.

    1. try-catch(-finally) 형식

      try {
      // 예외가 발생할 가능성이 있는 코드를 구현합니다.
      } catch (FileNotFoundException e) {
      // FileNotFoundException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
      } catch (IOException e) {
      // FileNotFoundException이 아닌 IOException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
      } finally {
      // 예외의 발생여부에 관계없이 항상 수행되어야하는 코드를 구현합니다.
      }

      if / else_if 와 비슷한 느낌. 첫번째 catch에서 걸리면 두번째는 실행 안됨!!
      finally 는 필수로 넣어줘야 하는 부분은 아니지만 위에도 적혀 있듯이 예외 발생 여부 상관 없이 항상 수행되어야 하는 코드가 있으면 finally 가 있는 게 좋다.


    2. try-with-resource 형식

      입출력과 함께 자주 쓰이는 형식이라고 함. 아직 입출력은 안 배워서 코드만 보고 이런게 있구나 정도만 파악 중.

      try (FileOutputStream out = new FileOutputStream("test.txt")) {
      			out.write("Hello Sparta".getBytes());
      			out.flush();
      } catch (IOException e) {
      			e.printStackTrace();
      }

      위에 try-catch 와 다른 부분은 try이후에 () 가 있다는 것.
      ()안에는 AutoClosable 인터페이스를 사용해야 한다고 한다.
      왜냐면 Auto~ 는 예외가 발생할 경우 close() 메소드를 호출하기로 정의되어 있기 때문이라고 함.

      import java.io.FileOutputStream;
      import java.io.IOException;
      public class Main {
      public static void main(String[] args) throws IOException {
            FileOutputStream out = new FileOutputStream("test.txt");
            try {
                out.write("Hello Sparta".getBytes());
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            out.close();
      	}
      }

      만약 try-with-resource를 쓰지 않고 try-catch만 사용한다면 위의 코드처럼 상당히 길어진다.


  • 메소드에서의 예외 선언
    catch문을 사용 하지 않을 경우, 메소드에 throws로 예외가 발생할 수 있다는 것을 알려주어야 한다고 함.

    void method() throws IndexOutOfBoundsException, IllegalArgumentException {
      //메소드의 내용
      }

    하.. 일단 정리는 했는데;;; 여전히 모르겠다 ㅠㅠㅠ
    다시 한 번 처음부터 강의를 들어보쟈...!!

    --오늘의 한 줄--

    정신줄 꽉 JAVA!!

0개의 댓글