Log/2021 CodeSquad Cocoa

코드스쿼드 코코아 1주차 학습정리&회고 모음

vanss 2022. 9. 27. 16:00
본 글은 CodeSquad 프리코스인 Cocoa 과정을 보내며, 학습한 것과 회고했던 내용들을 정리 및 기록하기 위한 글입니다.

 

2021.11.01(월)

일기

  코드스쿼드 학원의 코코아라는 커리큘럼을 수강하기 시작했다.
수강하게 된 이유는 스스로 학습하는 과정이 타이트하다고 느껴지지 않아
타이트한 환경과 여러 사람과 함께 지식을 공유할 수 있는 곳으로 몸을 던지고자 수강하게 되었다.
(물론 마스터즈 코스 합격이 목표이다.)

  오늘이 첫날이다.
생각보다 나만큼 코딩이 처음인 사람들이 1/3 정도 차지하여 놀랐지만 위로되어 좋았다.

  첫날이라 개발환경 + 몇 가지 코딩작업을 진행했는데, 개발환경 구축에만 상당한 시간이 걸렸다.
조건문, 반복문, 함수 복습이 주된 미션이였지만 오늘은 앞으로의 있을 개발 공부에 대한 신념을 갖는데 좋은 기회였던 것 같다.

  그 중 가장 맘에 와닿고 지켜야겠다고 생각했던 건 '남과 비교하지 않기'와 '어제보다 나은 내가 되는 것' 이였다. 이 두 문장은 내가 좋아하는 헬스의 '점진적 과부하'에 접목되는 이야기와 일맥상통한다.

  앞으로의 코코아 과정중에서 못 따라가는 시간이 많을 것이지만, 너무 좌절하진 않을 것이다. 어쩔 수 없는 것이니까! 그리고 코코아 사람들이랑도 친해져야지~ ㅎㅎ


기억에 남는 학습내용

  1. Scanner sc = new Scanner(System.in) 수 입력받기 위한 클래스
    (sc는 변수로 임의지정 가능하다.)
  2. a%4 == 0; 4의 배수 // a&4 != 0; 4의 배수가 아닐 때
  3. if문 안에 괄호를 삽입하여 3가지 조건을 만족시킬 수 있다.

2021.11.02(화)

궁금했던 내용

(답은 현 수준에서 이해한 것만 적음)

Q1. else와 else if를 최대한 안 쓰기 위해서는 어떻게 해야 할까?

  > A1. 코드 중복을 없앤다.

예시1번)

if(select == 1){
	System.out.println("하복판매");
}
else if(select == 2){
   	System.out.println("춘추복판매");
}
else if(select == 3){
   	System.out.println("동복판매");
}

 위와 같이 if문이 연속으로 중복이 될 때는 for 루프로 변환을 고려하거나 배열을 활용하는 방법이 있다고 하는데, for루프로 변환하는 방법은 조금 더 고민을 해봐야 할 것 같다.

String seasons [] = {"하복","춘추복","동복"};
System.out.println(seasons[selcet - 1] + "판매"); 

  중복되는 '판매'라는 문자열을 제외하고 기준이 되는 문자열을 배열로 정리하여 보다 간결한 if문으로 개선할 수 있다. 이번에는 어제 풀었던 알고리즘 if문 문제를 개선을 해보려고 한다.

예시2번)
if(90 <= a & a <= 100){
     System.out.print("A");
}
if(80 <= a & a <= 89){
     System.out.print("B");
}
if(70 <= a & a <= 79){
     System.out.print("C");
}
if(60 <= a & a <= 69){
     System.out.print("D");
}
if(0 <= a & a <= 59){
     System.out.print("F");
}

  점수 구간을 5구간으로 나눠 if문으로 구성하였었지만, 구간을 배열로 담아 개선해보겠다.

int score[] = {90, 80, 70, 60};
String arr[] = {"A", "B", "C", "D", "F"};
String grade = "F";

for (int j = 0; j < 4; j++) {
    if (a >= score[j] && a <= 100) {
        grade = arr[j];
        break;
    }
}

  100점 이상을 기입할 경우 F가 나오는 게 흠인데, 방법을 찾아서 다시 업데이트하도록 해야겠다.

Q2. 하드코딩이 무엇이지?(feat. 소프트 코딩)

  > A2. 하드코딩이란 값이 고정되어 있는 코딩으로 가변이 불가능한 딱딱한 코딩이고, 소프트 코딩이란 하드코딩과 반대로 값이 고정되지 않고 가변적인 코딩을 뜻한다.

Q3. Static이 무엇이지?

  > A3. 일반적으로 생성한 Class는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap영역에 생성된다.
객체의 생성 시에 할당된 Heap영역의 메모리는 Garbage Collector를 통해 수시로 관리를 받는다.
하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만,
Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료 시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 된다.(추후 내용 보충)

(출처:코딩 팩토리)

Q3-1. Garbage Collector는 무엇이지?

  > A3-1. 간단하게 자바에서 사용하지 않는 객체는 메모리에서 삭제하는 작업을 말한다. 메모리는 JVM 메모리의 5가지 영역 중에 Heap메모리만 다룬다.

Q4. arg []는 무엇이지?

  > A4. 아규먼트(Argumets)로 큰 뜻은 없다.(일종의 변 수명이다.)
커멘드 라인에서 Java클래스를 실행하게 되면 JVM은 길이가 0인 String 배열을 먼저 생성하게 되는데, 이때 main() 메서드 호출 시 매개 값(args)으로 전달되게 된다.

Q5. for문안에서 2가지의 변수 선언이 가능하더라

  > A5. 몰랐던 내용이었다. 예를 들어 for(int a=1, b=2; a <10 && b <5; a++, b--;)으로도 코딩이 가능했었다.

Q6. Break와 Countinue의 차이는?

  > A6.Break는 if조건문이 참일 경우 반복문을 중단하고 빠져나오는 문법이며, Countinue는 if조건문이 참일경우 Countinue아래 문장은 생략하고 반복문으로 돌아가 다시 반복하게 되는 문법이다.

Q7. 이중 루프를 빠져나가는 방법은 무엇이 있나?

  > A7.Break문을 활용하거나, 함수로 빼서 리턴하는 방법이 있다. 이외에도 여러 가지 방법이 있지만 주로 위 2가지 방법을 활용하는 듯 하니 다음에 이중 루프를 빠져나가야 한다면 이 방법들을 활용해보자.

 


2021.11.03(수)

회고

  후 미션의 난이도가 갑자기 올라갔다. 어느 한 팀원의 말로는 지수 그래프처럼 난이도가 뒤로 갈수록 상승한다는데, 벌써 체감되고 있다니 큰일이다. 오늘은 총 6개의 미션이 주어졌고 그중 내가 할 수 있을만한 미션을 1개 골라서 진행하거나 여유가 되면 2개를 하는 것이었다.

  내 기준에서 난이도가 다소 높아졌기 때문에 1차 목표는 '우선 돌아가는 프로그램을 만드는 것'이었다. 최대한 객체지향 생활체조 규칙을 지키도록 하고 진행하였다. 내 기준에서 할 수 있는 코딩이 많지가 않아 겨우 2개 정도의 프로그램을 만들 수 있었다. 돌아가기만 하고, 오류를 잡을 수 있는 예외처리나 가독성을 높일 수 있는 클래스, 메서드, 함수처리등은 아직 못하였다. 한개정도는 메소드 정리할 수 있을 거 같아서 오늘 남은 시간에 도전해보려고 한다.(다른 건 엄두도 못 내겠다 껄껄)


새롭게 배운 내용

  1. Collection.Shuffle이라는 것을 새롭게 배웠고, TA분께서 유틸 클래스라고 불렀었다.

List<String> members = Arrays.asList(-----);
Collections.shuffle(members);

Arrays.asList의 배열 안에 있는 문자열 데이터들을 무작위로 섞어주는 기능을 할 수 있는 녀석으로 카드 섞기나 랜덤 뽑기와 같은 게임에 활용할 수 있을 것으로 보인다. 랜덤으로 뽑는 기능을 구현할 수 있는 함수로 이외에도 여러 가지가 있지만 셔플이 내가 이해할 수 있을 만큼 접근성이 낮아서 선택하였다. 다음에는 다른 기능을 활용해봐야겠다.

  2. 콤마로 나눠서 출력해야 하는데 마지막 콤마는 안 나왔으면 좋겠다를 배웠다.

           String comma = ""; // 처음엔 공백으로 시작

           for (int i = 0; i < a; i++) {
               System.out.print(comma); 
               System.out.print(개고양이말배열(i)); // 처음 공백+"개"
               comma = ","; // 공백+"개"+"," 루프 ㄱ
           }

예를 들어 개, 고양이, 말 <-- 이런 식으로 출력이 되어야 하는데 콤마를 for문으로 돌리게되면 개,고양이,말, 이런식으로 마지막에 , 가 붙게 된다. 이를 제거하기 위해서 위와 같은 for문을 만들었는데 나름 만족스럽다.


21.11.04(목)

회고

  오늘은 수업이 있는 날이었고, 남은 시간 동안 어제 했던 미션을 리팩터링 하고 수업중 몰랐던 내용을 정리하려고 했는데 미션 리팩토링 하는 과정에서 while문을 제거하는 게 어려워서 계속 맴돌았다. 거기다 데이터를 text 파일을 읽어오는 코딩을 구성하다가 에러가 계속 떠서 거듭 막혔다 ㅠ_ㅠ. 결국 그래서 수업 중에 궁금했던 내용도 못 찾아봤다. 여기에 적어두고 주말에 업데이트해야겠다.

수업 때 정리하고 싶었던 내용들을 정리해보자면.

 

  • 현업에서는 대부분 자바 8을 씀(나중에는 각 버전별로 뭐가 다른지 알아야 함)
  • 자바 만든 사람은 제임스 고슬링(인터넷 시절이 되며 자바 애플릿이 뜨기 시작)
  • 함수는 코드의 유지보수 용이(분리)를 위해 활용한다.
  • for문에선 '=' 안 붙이는 게 좋다.
  • 가장 많이 쓰이는 자료구조는 ArrayList > Hashmap > Hashset 순으로 많이 쓰인다.
  • 내 코드는 자연스러운가? 되물음 하기
  • 돈은 빅 데시멀 써야 함(정확도 때문에 더블보다 빅 데시멀 씀)
  • 자바는 콜마 벨류밖에 없다.
  • 자바에서 new는 새로운 객체를 만들어 달라는 것이고 heap에 생김

  위 내용들은 잊지 말자