FW를 하다가 서버쪽으로 이직을 해야겠다고 마음 먹었을 때 부터 조금씩 Java를 공부해둔게 다행이었다.
아마 처음부터 Java를 공부하면서 알고리즘까지 준비를 하려고 했으면 조금은 더 힘들었을 것 같다.
(※그래도 C언어랑 Java랑 객체지향 부분을 제외하면 문법이 비슷해서 다행이다. 그래서 선택한 이유도 있긴 하지만)
아무래도 항해99에 프로그래밍을 처음 하시는 분들이 많으시다 보니까 과제로 나오는 알고리즘 문제는 난이도가 매우 낮은 수준에서부터 중간 정도의 난이도 까지만 나왔다.
그리고 나는 "걷기 반" 과 "달리기 반" 중에 "달리기 반" 을 선택했는데 조원들과 함께 과제로 지정된 40문제를 빠르게 풀고 개인적으로 "Java의 정석" 책을 공부했다.
(※걷기 반은 28문제 만 풀면 된다. 본인이 더 열심히 하고 싶으면 더 풀어도 상관은 없는 것으로 안다.)
기초 알고리즘 주가 끝나고 본격적인 주특기 주가 시작되었다.
여기서는 본인이 선택한 주특기에 맞춰서 "React","Node.js","Spring" 3개의 그룹으로 크게 나뉘었다.
그리고 선택한 주특기에 맞는 인강 과 과제가 개인 과 팀으로 주어지고 과제를 수행하여 제출하면 되는 형식이다.
항상 말로만 듣고 내용자체는 하나도 모르던 Spring에 대해서 드디어 인강을 보게 되었다. 약간 설레면서도 긴장되고 심경이 복잡했다.
(※주변에서 정말 어렵다 라는 이야기를 많이 들어서 그런건가 ?)
스파르타의 인강 스타일은 자세한 내용을 하나하나 다 다루면서 지나가기 보다는 일단은 어떻게 동작 하는지 ? 그리고 이렇게 이렇게 코드를 쓰고 따라하면 이렇게 동작이 됩니다를 일단 보여주고 학생이 이것 저것 본인이 직접 해보고 부딪히면서 문제점을 찾고 공부를 해나가는 방식을 추구하는 것 같다.
해당 방식에 대한 개인적인 내 생각은 해당 방식이 아주 마음에 든다. 일단 문제가 생기거나 잘 진행되거나 어떠한 경우에도 지루하거나 잠이 오지는 않기 때문에 사람의 특성을 잘 고려한 교육방식이라고 생각을 한다.
현재 5주차 중에서 간단하게 3주차 까지만 배워서 진행을 하고 있는데 아직까지는 모르는 용어와 왜 이렇게 진행되는지에 대해서는 설명 과 이해가 부족한 부분이 아주 많지만 앞으로 차차 계속해서 더 공부를 해나가면서 부족한 부분을 채워나가야 겠다 라는 생각이 많이 드는 주였다.
원래 항해99에서 주어진 CS스터디는 CODE 라는 책으로 스터디를 진행하는 것이었는데 개인적으로 CODE 책을 좀 읽어보니 내 개인적인 기준에서는 해당 책은 CS 스터디 용 보다는 인문학 서적에 가까웠다. 그리고 내용도 별로 재미가 없었다.
그래서 해당 책 대신에 각자가 CS에 관해서 조금씩 준비해서 돌아가면서 발표를 하기로 했다. 평소의 나라면 귀찮다고 하기 싫다고 했을 것 같은데 주변에 다들 열심히 하려고 하니까 나도 같이 참여를 하게 된다.
이런 점은 항해99의 장점이다. 주변에 열심히 하려는 사람들이 있으면 나도 같이 동기부여가 되는 것이었다. 아무래도 집보다는 독서실에서 조금이라도 공부를 더 하게 되는 그런 사람의 집단행동의 특성?
내가 원래 스터디를 이렇게 저렇게 막 벌이는 스타일은 아니고 할 수 있는 만큼만 하자는 주의라서 계획도 약간 여유있게 잡는 편인데
CS스터디에서도 말한 것처럼 주변 사람들의 열심히 하려는 의지에 맞춰서 나도 약간 따라서 열심히 하게 된 부분이 없지 않아 있다.
그래서 알고리즘 스터디도 같이 진행하기로 했다. 일단 하기로 한거 열심히 해야겠다.😂
스프링 프레임워크(영어: Spring Framework)는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 한다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.
[출처 : https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC]
아직 Spring 공부를 시작한지 얼마 안되었고 Spring의 내용도 매우 방대하기 때문에 Spring 에 대해서 잘 아는 게 없다. 그냥 JAVA 언어로 서버 개발을 도와주는 친구로 알고 있다.
Spring의 특징에 대해서는 추후에 더 조사해서 기록하겠다.
객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.
[출처 : https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D]
★객체지향 프로그래밍의 3요소★
[출처 : https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D]
JVM(Java Virtual Machine) 은 자바 바이트코드를 실행하는 실행기이다. 자바 컴파일러는 C/C++ 등의 컴파일러처럼 고수준 언어를 기계어, 즉 직접적인 CPU 명령으로 변환하는 것이 아니라, 개발자가 이해하는 자바 언어를 JVM이 이해하는 자바 바이트코드로 번역한다.
JVM의 특징은 다음과 같다.
스택 기반의 가상 머신: 대표적인 컴퓨터 아키텍처인 인텔 x86 아키텍처나 ARM 아키텍처와 같은 하드웨어가 레지스터 기반으로 동작하는 데 비해 JVM은 스택 기반으로 동작한다.
심볼릭 레퍼런스: 기본 자료형(primitive data type)을 제외한 모든 타입(클래스와 인터페이스)을 명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 통해 참조한다.
가비지 컬렉션(garbage collection): 클래스 인스턴스는 사용자 코드에 의해 명시적으로 생성되고 가비지 컬렉션에 의해 자동으로 파괴된다.
기본 자료형을 명확하게 정의하여 플랫폼 독립성 보장: C/C++ 등의 전통적인 언어는 플랫폼에 따라 int 형의 크기가 변한다. JVM은 기본 자료형을 명확하게 정의하여 호환성을 유지하고 플랫폼 독립성을 보장한다.
네트워크 바이트 오더(network byte order): 자바 클래스 파일은 네트워크 바이트 오더를 사용한다. 인텔 x86 아키텍처가 사용하는 리틀 엔디안이나, RISC 계열 아키텍처가 주로 사용하는 빅 엔디안 사이에서 플랫폼 독립성을 유지하려면 고정된 바이트 오더를 유지해야 하므로 네트워크 전송 시에 사용하는 바이트 오더인 네트워크 바이트 오더를 사용한다. 네트워크 바이트 오더는 빅 엔디안이다.
[출처 : https://d2.naver.com/helloworld/1230]
요즘 공부하면서 느끼는 점은 어떤 분야던 모르는 부분 1개를 공부하면 다시 모르는 부분 10개가 나온다는 것이다.
공부를 지속해나가면서 꾸준히 격차를 줄여나가야 하겠지만 정말 공부에는 왕도가 없음을 다시 느끼고 있다.
공부할때 사용한 사이트 들을 공유