오늘은 Azure에서 실제로 배포를 해보는 연습? 프로젝트를 했다.
VM,VMSS,LB 등 배운건 있는데 아직 VMSS와 LB를 연동 시키지 못해서
VM만 사용해서 배포를 했다.
배포 하는 방법은 AWS의 EC2와 비슷.. 아니 거의 똑같은 것 같다.
Filezllia에서 눈으로 보면서 업로드할 파일을 정하고 cmd를 통해서 원격 접속을 한 후에
필요한 라이브러리 다운!
저번 스파르타 강의에서 initial EC2 파일이 있어서
그걸 사용해서 아주 편하게 클라우드 컴퓨터 세팅을 완료했다.
이거 저거 둘러본 후에 nohup을 사용해서 배포 한 후에 제출!!
지금처럼 VM,EC2만 사용해서 배포하는 건 아주 쉬운데.... 로드 밸런서나 뭐시기 저시기
여러가지가 생기고 깃 액션을 사용해서 자동배포까지 하라고 하면..
바로 그냥 멘붕... 아직 클라우드 관련 수업이 많으니까 더 알아보도록 하자!
오늘 자바는 나머지 객체지향언어 추상클래스, 인터페이스, 에러,예외 처리에 대해서 알아봤는데..
대충은 무슨 말인지 이해했다고 생각하고 퀴즈로 넘어가는 순간
아무것도 이해하지 못한 나 자신을 발견할 수 있었다...
에이 뭐,,, 아직은 그럴 수도 있지 하고 다음걸로 넘어갔는데 마찬가지로 멘붕;;
바로 처음부터 다시 알아보자고 생각하고 일단 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가지 형식이 있다고 한다.
try-catch(-finally) 형식
try {
// 예외가 발생할 가능성이 있는 코드를 구현합니다.
} catch (FileNotFoundException e) {
// FileNotFoundException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
} catch (IOException e) {
// FileNotFoundException이 아닌 IOException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
} finally {
// 예외의 발생여부에 관계없이 항상 수행되어야하는 코드를 구현합니다.
}
if / else_if 와 비슷한 느낌. 첫번째 catch에서 걸리면 두번째는 실행 안됨!!
finally 는 필수로 넣어줘야 하는 부분은 아니지만 위에도 적혀 있듯이 예외 발생 여부 상관 없이 항상 수행되어야 하는 코드가 있으면 finally 가 있는 게 좋다.
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!!