CS 일기장

한화시스템 부트캠프 6주차 회고록 본문

한화시스템 beyond sw캠프/주간 회고록

한화시스템 부트캠프 6주차 회고록

덩할 2025. 2. 9. 19:13

연휴가 끝이 났다. 많이 풀어져있던 상태로 다시 가니 집중력이 많이 떨어진 내 자신을 확인할 수 있었다. 심지어 몸도 화요일까지 좀 좋지 못했다. 그렇지만 이번주 수목에는 학원 다니면서 가장 알차게 보낸 이틀을 보냈다고 스스로 생각하는 하루였다. 이제는 이 루틴을 가져가면서, 수업을 들어야겠다는 생각을 하였다. 그리고 알고리즘 스터디도 사람들과 시작했다. 감사한 제안에 일단 해보자라는 생각을 하였고, 최선을 다 해 볼 생각이다. 우선은 수업과 복습이 최우선인 상태로 알고리즘 공부마저, 수행하며 SQLD 시험도 볼 생각이다. 그러고 봄이 올 때 어학 점수를 마련해보는 것이 최종 목표인 상태이다. 

그래도 수업과 복습이 나에겐 최우선이니, 최우선을 뒤로 하면서까지 지장이 간다면 조절할 생각이다. 이번주에 배운 키워드는 자바의 꽃이라는 키워드였고, 해당 키워드에 대한 복습을 열심히 했기 때문에, 이런 알차다라는 감정을 느낀 주였던 거 같다.


이번 주에 무엇을 배웠나 ?

이번 주에는, 객체 지향의 2개의 특징인 상속과 다형성을 배웠다. 상속을 알아야 다형성에 대해 알 수 있으며, IS-A라는 키워드가 굉장히 상속을 이해하기 쉬운 키워드라 저렇게 생각하면 되는구나라며 조금 더 상속을 이해하기 쉬웠다. 상속을 하면, 코드 재사용로 인해, 편한 점도 있지만, 상속을 무분별하게 사용하면, 종잡을 수 없을 정도로 자식 관계도가 하나의 트리보다 더 복잡 해질수도 있다는 사실을 알게되었다.

하나의 인스턴스가 여러 가지 타입을 가질 수 있는 다형성이 존재한다. 다형성을 통해, 객체를 다른 방법으로 동작하게 할 수 있고, 참조 자료형도 형변환이라는 것을 할 수 있다. 업캐스팅과 다운캐스팅에 개념이 존재하였다. 그렇지만, 다운 캐스팅을 수행할 때에는, instanceof 연산자를 통해 확인 된 객체만을 다운 캐스팅을 수행해주어야 한다. 왜냐하면, sonata 객체를 생성하였지만, 참조 자료형인 car라는 변수에 담았기 때문에 컴파일러가 컴파일 시에 문제가 없다고 판단하여(업캐스팅) -> 상속의 개념과 합쳐져 문제가 없는 코드라고 판단 하였지만, 자식은 1개만 가지라는 법이 없기 때문에, 다른 자식 클래스만의 고유한 메소드라고 했을 때, 에러가 발생해 프로그램 작동 측면에서 문제가 발생한다. 

자식은 부모가 될 수 있고 부모는 자식이 될 수 없다는 것에 대해서, 코드를 직접 실행시켜보면서 왜?라고 생각해보며 수행해보는 것이 헷갈렸다. 

Car car = new Sonata();
if(car instanceof Sonata) {
		((Sonata) car).moveSonata();
} else if(car instanceof Avante) {
		((Avante) car).moveAvante();
} else if(car instanceof Grandure) {
		((Grandure) car).moveGrandure();
}

 

그 다음, 예외처리에 대해 배웠다. 예외처리에서는 Checked Exception과 Unchecked Exception에 차이를 잘 알고 시작해야 한다는 것을 알았다. 결국 기존에 예외에 대한 처리가 구현되어있는 Unchecked Exception이며, 가장 쉽게 만날 수 있는 ArrayIndexOutOfBoundsException(직역, 배열 인덱스가 범위 초과)등은 이미 코드에서도 에러가 났을 때 봤던 문구들이기 때문에, 우선 프로그램으로 무엇을 만들던 간에, 실행이 되야 한다는 것에 초점을 맞춰 예상되는 에러를 직접 try-catch문을 작성하거나 최종으로 JVM까지 예외를 던진다라는 표현을 사용하는 throws 문을 클래스 명에 붙이는 것까지 실습을 해보았다. 

 

그 다음 내가 가장 집중했던 입출력에 대해서 배웠다. 이것은 글의 내용이 너무 길어질 거 같아 적당히 패스, 알고리즘 문제 풀이의 입출력 성능 향상 보조 스트림(기반 스트림이 아니다.) 스트림은 시작이 기반 스트림이고, 그것에 성능 향상이나 메소드를 추가로 쓰기 위해 매개 변수로 기반 스트림을 사용하며, 보조 스트림으로 객체를 생성해준다는 사실을 알고, 아 나는 문제 풀이 할 때 정말 생각없이 BufferedReader를 사용했구나에 대한 반성을 했다. 


1) 좋았던 점

1. 수업 할 때, 최대한 디테일하게 이해하려 했다.

결국 모든 예외들은 Throwable 클래스에 부모들이고, 모든 객체들의 부모는 Object라는 사실을 알고 다형성과 예외처리 입출력에서 부모 클래스를 계속 인텔리제이에서 Ctrl + 클릭 하면 볼 수 있는 기능들을 사용해, 긴 구현되어 있는 클래스들을 읽으며, 어떤 메소드에서 예외처리가 필요한지, 최대한 이해하고 왜 이렇게 구현해놓은 걸까 하면서 이해해볼려고 하는 자세가 이해를 빠르게 할 수 있는 부분이였던 것 같다.

2) 당일 복습은 최대의 효율

당일 날 오늘 수업한 부분을 새벽까지 복습하고 가니까, 그 다음 날 수업할 때 이해가 정말 잘 되는 모습을 보며 내 지난 1달이 바보 같이 복습을 했다는 사실을 알게되었다. 즉 지금까지, 가짜 복습을 하고 있었구나 라고 깨달았다. 이제는 최대한 당일에 배운 것들을 복습하고 집에 가볼려고 한다.

허수 공부 하지 말고, 기왕 공부하다 갈거면 효율을 극대화 해야해 멍청아


2) 아쉬웠던 점

1) 나의 컨디션 관리

월요일, 화요일에는 정말, 힘들었고 집중력도 최악이었다. 그렇다면 ? 이 사람 연휴 때 정말 미친듯이 놀았나요 
? 아니요. 그래서 더 억울하기도 하지만, 이사를 몇 주 동안 하는 바쁜 사람(아무래도 새롭게 지역을 옮기는 이사였다.) + 연휴 때 계속 수면 부족으로 인해, 컨디션이 너무 안좋았다. 컨디션이 안 좋아서, 그날 수업했던 것을 따라가는 것은 가능했으나, 복습을 똑바로 못했다. 학원을 다니는 이 기간 동안은 운동도 하면서 컨디션 관리를 해야겠구나라는 것을 뼈저리게 느낀 한 주였다.

2) 지각

내 학원을 다니는 목표는 개근이였다. (휴가를 쓸 계획 없음, 친구 없음, 여행 계획 없음) 3 없음의 상태인 나로써, 이 기간동안은 정말 많은 것을 얻어가는 것이 목표이기 때문에 졸업식도 안 갈려고 했으나, 하루 지각을 해버렸다. 와 나 진짜 왜이러지 싶었다. 컨디션 난조와 별개로 지각을 해버렸다... 이러지 말자


3) 개선해야 할 점

저녁 먹기 전에는 집중력과 체력이 떨어지기 때문에, 밥을 빨리 먹고 빠르게 복습을 수행하자(배달 먹을거면 빨리 시키기 -> 메뉴 고민을 하지 마)

 

이제 진짜진짜진짜 정리 해야 할 것들을 대부분 했다. 1월에 생각해보니 주말을 온전히 쉬어 본 적이 없는 것 같다. 그 시간을 복습에 사용하고 싶은데, 다음 주 부터는 온전한 나의 시간이 오니까 길게 공부를 해보자
이제 이런 특징들을 무엇을 만든다라고 했을 때 코드에 녹여내는 것이 과제이다. 활용도를 최대한으로 해보자