7월, 2021의 게시물 표시
이미지
예외처리 자바에서 예외처리라고 하면 보통 두가지 방법이 거론된다. try-catch 문으로 감싸주는 방식과 throws 로 던져주는 방식인데, 이번에 새로 배운 사실은 엄밀히 말하자면 throws 는 예외처리가 아니다. 던져주는 곳 중 가장 마지막 장소에서는 어찌됐든 try-catch 문으로 해결해 주어야 하며 이게 이루어 지지 않으면 프로그램이 종료돼 버리는 그런 문제가 발생하는 것. 그래서 예외처리에 좀 더 신중해야 하는 것 같다. 또 throws 는 클래스가 아닌 메서드의 매개변수 뒤에만 던질 수 있다.  exception 가 모든 예외클래스 중 상위클래스는 맞지만 그 위에는 throwable 이 있고 같은 라인에는 error도 있다. error는 메모리 파괴와도 같은 코드로 고칠 수 없는 문제 들을 담고 있다. finally 는 예외발생과 상관없이 무조건 실행되는 문장이며 보통 공유 객체 반환을 위해 사용됨. 이는 정말 무조건 실행인데 return 이 상위에 존재하더라도 실행!!!!  이와 같을 경우 catch 문에 걸려서 return 된다면 try 문장 바깥의 print 문은 실행 안될 수 있지만, finally는 return 아래임에도 불구하고 실행된다. RunTimeException 같은 경우는 validation check로 미리 예방할 수 있다. 이게 뭐냐면 흔히 하는 nullcheck나 데이터 유효여부 체크를 말하는 것. try-catch문을 처음 봤을 때 조건문과 비슷하다는 생각이 들었는데, 실제로 비슷하게 사용할 수도 있다는 걸 알게 되었다.   자바 파일 읽어 들이기  진짜 너무 어려웠다. 기본적으로 파일을 읽고 쓰는 방식에는 stream 과 reader(writer) 방식 두가지가 있는데, 개행을 구분지어서 읽는 방식과 전체내용을 한번에 읽는 방식으로 나뉜다고 보면 된다. 용어적으로 헷갈릴 수 있는것이 위에서 언급한 stream은 메서드형식이고 자바에서 데이터를 주고 받을 때 사용되는 stream은 연속된 바이트의 흐름이다. 이에 대한
이미지
월말평가, 알고리즘  어제 월말 평가를 처음 진행하며, 1번부터 4번까지는 단순 구현 문제였지만 5번같은 경우는 알고리즘 문제로 나왔다. 카톡방에서 의견교류를 한 결과 이게 백준 2615번 문제 "오목" 이라는걸 알았는데... 역시 내가 급하게 풀었던 답은 다수의 문제가 있었다. 우선, 육목은 승리조건이 아니다. 해당 조건을 고려 하지 않아서 6시 종례 이후 해당 조건을 고려한 리팩토링을 해봤으나 백준 채점 결과 틀린걸로 나왔다.  (별개로 백준을 처음 이용해 봤는데, 모든 클래스를 Main 으로 설정하는것이나, 기본 형식이 제공 되지 않는 것, 복사 붙여넣기가 자유로운것이 프로그래머스와 많이 다른 모습을 보인것 같다.)  Git contributions 또 어제 알게된 것은 깃허브 잔디 심는것에 대한 설정인데, 이번에 매일 숙제가 제공되어서 이것을 내 깃에도 올리며 꾸준히 커밋푸쉬를 진행하려고 노력중이다. 저번 주 내내 했으나 어제 확인 시에 그냥 회색으로 있는걸 확인했는데, 이게 나의 로컬 깃에 저장된 user.email이 깃 email과 일치하지 않아서 발생하는 문제였다. 깃 브랜치 관리를 위해 설치한 깃배쉬를 통해 해당 config를 확인하고, 수정해서 이제 푸르른 잔디를 관리할 준비는 끝났다고 볼 수 있다.  싱글톤 패턴 마지막으로 오늘 오전에 배운 내용이 인터페이스를 이용한 싱글톤 객체 생성 부분인데 그간 상당히 깊은 생각없이 사용해 왔다. 와중 실습 문제중에 6번 간단한 구현을 해결하려 하는데 너무 어려운 것이었다. private static한 생성자, public한 호출 가장 핵심인 한문장이라고 봤고, 나도 그렇게 생각한다. 객체를 단한개만 만들어서 해당 생성에 대한 부분은 숨겨두지만, 사용하기 위해 public 하게 호출이 가능하게 만든다. 이게 메모리적으로 어떤 이점이 있는 지에 대해서도 더 확고하게 배운 것 같다. 위와 같은 방법으로 싱글톤 객체를 생성해주고 getInstance() 메서드를 통해 해당 객체를 불러와서 사용
이미지
부모를 참조한 자식클래스 객체 생성  사실 이는 굉장히 기초적인 부분이지만 교수님의 말씀대로  1) 자식 = new 부모      2) 부모 = new 자식  이 두가지에 대해서 꽤나 헷갈렸던 부분이라 배운김에 정리하고 넘어가려한다.  일단 2번 부-자 부분이 에러가 나지 않는 상황이고, 이는 제대로 객체 생성이 이루어진다. 이 때 최상위 클래스인 Object 는 기본적으로 참조, 이후 필드나 메서드는 부모의 것으로 사용되어 진다. 딱 하나 예외상황이 있는데, 자식이 부모의 메서드를 오버라이딩 한 상황이라면 해당 객체를 이용해서 p2.print(); 이런식으로 메서드 호출을 했을 때 자식메서드가 사용되어진다. 이는 오직 오버라이딩된 메서드에만 적용되는 상황이라고 한다. 만약 parent의 su라는 필드가 int = 300 이고, child의 같은 이름인 su라는 필드가 int = 300라고 하자. 이 때 p2.su 의 value는 부모의 것인 300을 가리킨다. 만약 부모 = new 자식 의 모양으로 객체를 생성했을 때에도 자식의 필드, 메서드를 사용하고 싶다면, 새로이 자식 객체를 생성하며 형변환 해주는게 필요하다.      Parent p = new Child();     Child c = (Child)p;      그런데 굳이 이렇게까지 할거 있나 ...  p.s. 자바에서의 클래스 간의 관계에서는 오직 직계(부모, 자식, 자손) 관계만 존재한다. 수직적으로만 존재하고 수평적인(형제)관계는 없다고 한다. -> 이건 알고있었는데 반전은 프론트 언어에서는 sibling 관계가 있다고 한다. 너무 신기하고.

0719 첫째날부터 왕창 배운다.

이미지
 반복문 제어  평소에는 지양하지만 알고리즘 문제를 해결하다 보면 이중 반복문을 사용하게 되는 상황이 자주 있다. 이 때 특정 조건에 따라 continue와 break를 적용 시키는 상황이 있는데, 항상 가장 안쪽의 반복문에 대해서만 제어가 되는거라 임의의 flag변수를 두어서 이를 통해 불편하게 제어하곤 했다. 오늘 싸피 수업에서 자바 기초적인 부분을 듣고 있는데 해당 질문이 문제에 있어서 생각하고 있었는데 댓글로 라벨링이 올라는것이었다. 교수님도 당연하게 라벨링을 사용하면 되죠? 라고 하시고 넘어갔는데, 이를 처음 들은 나에게는 신세계... 이후 이에 대해 조금 찾아보고 정리 하려고 이 글을 작성하기 시작했다.  라벨링   for이나 while 같은 반복문 앞에 '이름 :' 의 형태로 라벨을 남겨주면 내부에서 break, continue 와 같은 제어문을 사용할 때 해당 라벨을 남겨 줌으로써 쉽게 위치를 지정해 줄 수 있다. 사용법도 내용도 직관적이고 간단해서 지금 알아두면 알고리즘 해결에서 꽤나 유용하게 쓸것 같은 느낌이다. 이렇게 기초부터 새로배우면 하루에 하나는 얻어 가는 느낌이라 나쁘지 않은 수업이 될 수 있다.  자바 입력 보통 자바에서 출력을 사용할때는 System.out 객체를 사용하곤 한다. 물론 콘솔에 직접 찍어보는건 점점 지양해야 한다 하지만 기초 자바를 배울 때나 잠깐 콘솔에 찍어볼때는 유용하게 쓰이는 데, 이후 입력에 관한 부분은 점점 아에 사용을 안하기 때문에 종류가 더 많음에도 불구하고 대충하고 넘어갔던 기억이 있다.  출력이 저런 객체라면 입력은 기본적으로 System.in 이라는 객체다. 해당 객체의 read() 메서드를 사용한다는데, 나는 이것또한 이번에 처음 들었다. 처음부터 Sacanner 객체를 통해 입력을 받는 방법을 배웠는데, 이때도 System.in 이 당연히 들어간다. 차이점은 아래와 같다. System.in.read();  아스키코드 값을 리턴하기 때문에 '0'입력 시 48, '