오늘 공부한 내용

  • Spring 입문주차 2주차 시청 
  • 알고리즘 특강

어려웠던 내용

1. Entity에 대한 이해

- DB를 보다 쉽게 다루기 위하여 사용되는 JPA에서 관리되는 객체를 의미

- 하지만 실제 코드를 보면서 따라해봐도 뭐가뭔지 잘 모르겠다.

2. 영속성 컨텍스트

-  Entity 객체들이 저장된 공간을 의미

 

새로 알게된점

1. 포인터 / C 언어

포인터란 변수의 메모리 공간의 주소를 가리키는 변수 이다.

변수명 앞에 *를 붙이면 된다.

✔️ 포인터 변수 선언

int a = 123;
int *p = &a; // &a 는 int a의 주소값
  • 주소 연산자(&)는 변수의 이름앞에 사용하여, 해당변수의 주소 값을 반환하며 변수 a에 &를 붙힘으로 a의 주소값을 의미
  • int *p = &a; 처럼 선언할 때에는 변수명(p) 앞에 *를 붙혀서 포인터 변수임을 명시
  • 선언한 이후에 *p라고 쓰게 되면, 포인터 변수 p가 가리키는 주소의 값을 의미. 즉 123가 된다
  • 즉 a 와 *p는 같다. (a에 저장된 값 = 123, * p가 가리킨 주소에 있는것 = 123)
  • &a 와 p는 같다. (a의 주소 값 = 10000, p가 가리키는 주소 = 10000)

중요 ! 자바에는 왜 포인터가 없을까?

  • 자바에는 참조(Reference)가 있기 때문
  • 포인터 vs 참조
    • 포인터: 메모리를 직접 핸들링 할 수 있음
    • 참조: 메모리를 직접 핸들링할 수 없음
  • 포인터는 주소값을 임의로 변경가능하며 유연성과 성능을 향상시킬수 있지만 안정성이 떨어져 개발자가 실수하면 바로 에거로 이어질 수 있다. Java에서는 개발자의 실수를 방지하기 위해 자바가 메모리 영역을 관리한다.
  • GC(Garbage Collector)가 실행될 때 마다 Heap 영역의 객체의 주소가 계속 바뀌기 때문 (자바가 관리)
    • 더이상 stack에서 참조되지 않는 Heap 영역의 객체들은 GC가 제거

  

오늘의 느낀점

금일 특강에서는 알고리즘 처리방법, C언어에 대한 간단한 설명 을 해주었는데 현업에서도 자바 뿐만 아니라 컴퓨터의 근본이었던 C언어에 파이썬 등 다양한 언어까지 사용되니 개발자는 끊임없이 공부를 해야한다는 튜더님의 말씀을 들으며 참 갈길이 멀구나라는걸 느꼈다.

자바도 어렵게 느껴지는데 C언어는 정말 복잡한 구조였겠구나라고 생각이 든다.

그래도 나중에 따로 공부해 봐야지...

 

오늘 공부한 내용

  • Spring 입문주차 2주차 시청 
  •  

어려웠던 내용

1. Controller - Service - Repository 분리하기

- 분리과정이 잘 이해가 안된다.

2. IOC와 DI

- IOC컨테이너에서 직접 Bean을 가져오는 경우가 어렵다.

 

새로 알게된점

1.  업무의 세분화를 위하여 크게 Controller - Service - Repository 형태로 구분하니 확실히 코드가 깔끔해지고 가독성이 높아졌다.

 

 

오늘의 느낀점

기존 영상에서 만들던 메모장 프로젝트에서 하나의 클래스에서 3구분으로 나누어서 처리하는걸 보니 확실히 이렇게하면 추후 다른사람이 코드확인이 편리하다는걸 느낄수 있었다.

또 IOC에서 그동안 선배님들의 스프링프레임워크의 지속적인 개량으로 대부분을 자동적으로 Bean처리하여 코드작성에 편리함을 더해준다는것을 알았지만 영상에서 말한대로 오히려 편리함떄문에 이게 왜 들어가고 적용되는지 이해가 안된다. ㅠㅠ

오늘 공부한 내용

  • Spring 입문주차 1주차 시청 
  • 개인과제 작성

어려웠던 내용

1. Path Variable, Requset Param

2. Create, Read, Update, Delete 구현

 

 

새로 알게된점

1.  Datebase, SQL에 대해 정확히 알게 되었다.

-  정보를 저장하는 장소인 Datebase에 원하는 정보의 구조로 조작,관리 하기 위해 사용되는 언어가 SQL이다.

 

 

오늘의 느낀점

금일 영상을 보면서 Create, Read, Update, Delete 구현을 최대한 이해하는데 중점을 공부했다.

영상에서 메모장을 만들면서 실습했는데 웹페이지에서 필요한 기능을 Spring은 간단한 명령어로 적용하는 것을 보면서 확실히 JavaScript보다는 높은 편의성을 가지고 있다는걸 느꼈다.
아직 제대로 적용못하고 이해가 안되지만 이를 Java언어로 작성시 얼마나 손이 많이가고 오류가 일어날지  감이 안올정도 이다.

문제는 공부를 해도 적용을 못하니 개인과제는 이번에도 완성은커녕 반도 제대로 못하고 시간에 쫓겨 제출하게되었다.

주말에 개인적으로 공부하고 만들어보면서 연습해야 할거 같다.

스프링 진짜 어렵구나....

 

 

오늘 공부한 내용

  • Spring 입문주차 1주차 시청 
  •  

어려웠던 내용

1. 전체적인 구조를 이해하려해도 낯선 구조와 단어로 이해가 어렵다.

 

새로 알게된점

1.  Controller를 이용하여 API를 처리하는데 필요한 클래스 갯수를 줄여 보다 코드를 간편하게 만듬

 

 

오늘의 느낀점

Spring 구조가 참 어렵다.

Java로 작성히 중복되는 코드를 줄이고 보다 효율성 높게 처리하기 위해 만든거라지만 하나하나 활용하기에는 아직 이해가 안가는 부분이 너무 많다.

또 기초 강의에서 언급되던 부분이 여기서도 적용되다보니 자바 오버라이딩 부분을 좀 다시 공부해야 겠다.

오늘 공부한 내용

  • Spring 입문주차 1주차 시청 
  • Spring 베이직반 강의 / Collection & Exception

어려웠던 내용

1. Exception에 대해서는 아직 제대로 알지 못함

 

새로 알게된점

1.  Java 의 배열 , 컬렉션에 대한 종류( List, Queue, Set, Map )와 정확한 개념에 대해 알게 되었다.

 

 

오늘의 느낀점

금일 Spring 1주차 초기부분 영상 시청에서 주로 Spring이 왜 필요하며 어떻게 이루어지는 지에 대해 보다보니 지금까지 우리가 편하게 썼던 인터넷이 내가 생각했던것보다 훨씬더 복잡한 존재 였다는것을 느끼게됬다.

베이직반 강의에서는 Spring강의에 앞서 먼저 가장많이 사용되는 Collection, Exception에 대해 강의 해주었는데 세부적으로 예시를 드니 Collection은 이제 확실히 개념이 잡힌거 같은데 Exception은 아직 두루뭉실하게 잡혀서 추후 따로공부해야 겠다.

오늘 공부한 내용

  • 프로그래밍 기초 / 심화반 특강
  • Java의 정석 책 / 객체지향 복습

 

어려웠던 내용

1. Object에 대한 이해, 상속 에대한 이해

 

 

새로 알게된점

1. Object는 객체를 말하며 객체는 의미적으로 뭉쳐있는 역할을 가지는 존재 라는 추상적 개념이라는 것에대해 이해했다.

 

 

오늘의 느낀점

이전에 심화반에서 한 특강을 따로 시청하며 객체지향에 대한 전체적인 개념을 공부했다.

영상을 보면서 객체니, 상속이니, Object이니 단어에 궁금한 의미를 가지는게 많았는데 영어로 따지면 동사, 명사 처럼 명칭을 나타나는 추상적인 개념을 의미하는게 많아서 헷갈렸던 것을 세부적으로 잘 풀어서 설명하다보니 이제야 각 단어가 무엇을 의미하는지 이해가 되었다.

특히 강의에서 객체를 잘 정의해서 정리하면 코드가 편해진다고 했는데 이 의미가 무슨의미인지 확실히 와닿았다.

객체에 익숙해지는게 주 관건이 될거 같다.

또한 스프링 주특기를 시작하는 날이기도 한데 아직 자바도 제대로 이해 하지 못했는데 스프링을 잘할수 있을지 모르겠다

매니저 님이 말씀해주시는 스프링 일정 계획표를 확인하니 먼저 1주동안은 강의시청에 집중하는 시간을 주로 하며 실력에따라 베이직, 스탠다드, 챌린저 형태로 나누었는데 나는 아직 기초가 안잡혔다고 생각해서 베이직 으로 들어갔다.

베이직 실질적 교육은 내일 부터 이다만 잘 할수 있을지 걱정이다.

오늘 공부한 내용

  1. 키오스크 과제 답변확인
  2. 코딩 도장 예제 풀기

 

코딩 도장 예제

  • 10미만의 자연수에서 3과 5의 배수를 구하면 3,5,6,9이다. 이들의 총합은 23이다. 1000미만의 자연수에서 3,5의 배수의 총합을 구하라.

답변

public class Multiplesof3and5 {
    public static void main(String[] args) {
        int sum = 0;
        for ( int i = 1 ; i < 1000 ; i++) {
            if ((i % 3 == 0 || i % 5 == 0))
                sum += i;
        }
        System.out.println(sum);
    }
}

오늘의 느낀점

항상 강의만 보면서 연습하다가 코딩 도장이라는 곳에서 직접 예제문제를 해결하는 방식으로 풀어보았는데 분명히 다 배웠던 것임에도 불구하고 제대로 풀기가 어려웠다.
풀면서 내가 생각했던구조가 오히려 점점 더 어려워지고 이상해지다보니 해결이 안되서 결국 답을 보았는데 답변을 보면서 분명히 이해는 하고 있지만 이 구조식을 머리속으로 만들기까지가 어렵다는 것을 느꼈다.
이거는 수학 문제 풀때처럼 공식만 외운다고 해결될것이 아니라 직접 문제를 풀고 해결하면서 응용방법을 올려야 진짜 실력이 늘거라는것을 확인해싿.
 

 

프로젝트

  • 팀명 : 코딩쿠킹스
  • 팀원 : 김대영(팀장), 임상훈, 송지헌
  • 개발 기간 : 2023.10.25 ~ 2023.10.30
  • 개발 내용 : 호텔 예약 프로그램 제작
  • 깃허브 : https://github.com/kdy9960/HotelProject

1. KEEP

협업

  • 초반 알고리즘 작성으로 과제실행에 앞서 전체적인 구조 설계 와 기능  구분
  • Git으로 수정된 파일을 바로 올려서 적용 

기술

  • 객체지향 위주로 코드를 작성
  • switch문 적극적으로 활용

2. PROBLEM

협업

  • Java 문법의 낮은 숙련도로 기능 구현하는데 여러움을 느낌
  • 서로간의 코드작성시 변수의 혼란으로 커밋할시 혼선이 옴

기술

  • github의 미숙한 활용도
  •  

3. TRY

협업

  • 각 담당 기능 별 코드 리뷰
  • 코드 작성시 사용하고 있는 변수 값에 대해서 공지글에 올리기
  • 팀원 개인의 역량을 파악하는 시간을 갖기
    • 할 수 있는 것과 없는 것의 명확한 구분 필요
  • 정기 소통 시간 계획
    • 저녁 정기 미팅: 진행 현황 공유
  • 강의에서 배움 Java 기초를 최대한 이용하여 제작
  • Github 적극적인 사용

기술

  • 리팩토링 시도
    • 코드 리뷰를 통한 더 나은 코드 모색
    • 코드 합칠시 구분이 잘되도록 변수이름 지정에 좀더 세분화할 필요확인
  •  

4. 느낀 점

 

김대영

처음 배우는 Java로 문법을 잘 활용하지 못하여 과제를 하면서 계속 버벅이다 보니 더더욱 힘들게 느껴졌던거 같습니다.

그래도 이전 개인과제시 개념이해에 많은 시간을 보내 과제를 수행하지 못했던때와 달리 이번에는 그동안 학습한 내용을 바탕으로 한가지의 기능을 맡아서 작성했고 이를 반영하여 프로젝트를 완료 할 수 있어서 보람을 느꼈습니다.

또한 내가 맡은 파트라서 혼자 작업하다 막히는부분을 해결하기위해 고민하는 것보다는 즉시즉시 팀원들에게 공유하면서 피드백을 받으면서 작업하는게 훨씬 정확하고 빠르다는 것을 크게 느끼게 되었습니다.

좀더 문법에 숙달하여 다음 프로젝트에는 도움받는 팀원이 아닌 주는 팀원이 되고 싶습니다.

임상훈

이번에 프로젝트를 진행하면서 협업의 중요성을 깨닫게 되었고 아직은 깃 관련 기능을 잘 다루지 못하고 코드 짜는법도 아직은 미숙하지만  앞으로 팀원들과 계속 프로젝트를 진행하면서 성장해나가겠습니다.

송지헌

캠프에 들어오고 처음으로 한 팀과제였는데, 깃을 통한 협업을 제대로 하지 못해서 아쉬웠고, 배운 것을 토대로 코딩을 활용하지 못해서 더더욱 아쉬움이 많이 느껴졌습니다.

다음번 프로젝트때는 도움이 되는 코드들을 만들어 팀에 기여를 하고 싶습니다.

 

 

후일담

Java를 활용했던 일전의 개인과제이후 두번째인 팀별과제를 완료했다.

이번 팀별 과제를 수행하며 java의 기초 문법에 대해 좀더 크게 이해할수있는 계기가 되었다.

다만 개념을 알아도 이를 실질적으로 문법에 적용하기위해서는 미흡한 부분이 많아 다양한 예제를 풀면서 좀더 구조숙달에 힘을써야 할거 같다.

오늘 공부한 내용

  • 보충반 특강 2번 / 클래스 와 객체
  • 팀별과제 고객등록기능 제작

 

어려웠던 내용

1. 클래스 구현시 구분

2. 고객등록기능 제작시 객체 구분이 어려움

 

 

새로 알게된점

1. 클래스 와 객체에 대한 정확한 개념 정립

2. 클래스 구현시 약속 ( 객체, 메소드로 의미를 파악하기 쉽도록 작성하기)

- 클래스, 객체의 이름은 명사 / 메소드 이름은 동사 로 처리하면 코드를 읽고 구분하는게 굉장히 쉬워진다.

- ex

Page myPage = new Page()
myPage.save();

Order lastOrder = new Order()
lastOrder.save();

 

 

 

오늘의 느낀점

오늘은 특강에서 클래스와 객체 를 작성히 정확하게 이것은 변수고 이것은 어디 클래스의 객체를 가져온다는 식으로 상세하게 알려주어서 그동안 부분적으로 잡혀있던 개념이 확실하게 익히게 되었다.

클래스와 객체 개념이 정확히 잡히니 과제를 수행하는데 있어서 어디가 문제고 이후 기능을 실행하기 위해 어디서 값을 끌어와야 하는지 알수 있어서 금일 팀별과제의 고객기능추가하는데 있어서 도움이 되었다.

좀더 숙련된후 나머지 개념도 정확하게 익히면 문법기초를 시행하는데있어서 어려움이 많이 줄거 같다.

오늘 공부한 내용

  • Java의 정석 : 클래스 정의 및 구조, 객체 생성 및 배열, 클래스 변수 와 인스턴스 변수,  메서드의 선언,구현,호출 , return문, static
  • 팀별과제 : 고객등록 기능 제작하기

 

어려웠던 내용

1. 입력된 고객 정보를 수정하는 방법

 

 

새로 알게된점

1. 클래스 라는 설계도를 작성시 공통적으로 적용되는 변수는 static을 붙여서 사용하면 편하다

2.  고객등록 기능 제작시 return문을 많이 활용하였다.

- return문의 개념과 용도를 알고 Java에서 많이 사용될 키워드라는것을 확인했다.

3. trim() 함수 : 앞뒤 공백을 없애고 문자열 반환 ( 단어 사이의 공백은 유지 )

-  String txt = "       안녕     친구    !  "

System.out.println(txt);            // "       안녕     친구    !  "

System.out.println(txt.trim());   // 안녕     친구    !

이와 같이 원본은 변하지 않고 공백만 정리됨

 

오늘의 느낀점

 

+ Recent posts