개발일지

2023.12.19 TIL

과일바구니♡ 2023. 12. 19. 20:08

1. 오늘 배운내용

  1) 알고리즘 코드카타

 자리수 구하기

   class Solution {
    fun solution(n: Int): Int {
        var answer = Sum:${numbers.sum()}

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        println("Sum:${numbers.sum()}")
        return answer
    }
}  답 틀림.

정답

class Solution {
    fun solution(n: Int): Int {
        var input = n
        var answer = 0

        while (input != 0) {
            answer += input % 10
            input /= 10
        }

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.

        return answer
    }
}

 

반복문은 그렇다치고, 왜 10을 나누지? 모르겠다.

 

2) 강의들음

 ddd책 권유

주요 용어 단어 개념정리하기

-스프링: 문맥에 따라 다르게 사용된다. (dl 컨테이너 기술, 프레임워크, 부트 프레임등 포함한 단어로도 쓰인다.)

 자바,코틀린 언어기반의 어플 프레임워크로, 최신 Java 기반 엔터프라이즈 애플리케이션을 위한 프로그래밍 및 구성 모델을 제공한다. Spring의 핵심 요소는 애플리케이션 레벨의 인프라 지원으로, 개발자가 비즈니스 로직에 집중할 수 있도록 엔터프라이즈 애플리케이션의 "Plumbing(직역: 배관)"에 중점을 둡니다.

 

- Plumbing(직역: 배관) ?

              Application의 각 요소들을 조합하는 과정이다.

 

-Spring 과 Spring Boot의 차이는 바로 이 Plumbing 방식의 차이에 있습니다.

-현재의 Spring은 Client, Frontend Server의 요청에 따라 적절한 JSON Data를 응답해주는 역할을 주로 한다고 볼 수 있다.

  이전에는 HTML / CSS와 같은 리소스를 응답해주는 역할도 하였지만, 현재에는 Data를 주로 응답해주는 역할을 합니다.    여기서 Data는 여러 형태가 될 수 있지만, 현재에는 대부분 JSON 포맷을 사용합니다. 

  JSON은 아래 예시처럼 key, value 형태로 이루어진 포맷이라 할 수 있고, Key는 문자열(String), Value로는 수(Number), 문자열(String), 참/거짓(Boolean), 배열 (Array), 객체 (Object), null 값이 올 수 있습니다.

 

- Spring Boot는 Plumbing( Application의 각 요소들을 조합하는 과정)이 없이 자동으로 할 수 있게 도와주는 도구이다.

  스프링 프레임워크에 따라 오는 것으로, 중간에서 다른 기능들을 쓸수 있게 도와주는 역할을 하면서, 웬만한 설정은  메뉴로 되어 있으며, 설정은 변경이 가능하다. 

 

 

    < 프레임워크와 라이브러리는 일반적인 문제를 해결하는 데 사용하는 다른 사람이 작성한 코드이다.  

   단순한 코드도 라이브러리가 될 수 있다. 하지만 프레임워크는 Spring, Django, Vue.js 등, 일반적으로 어떤 프로젝트에 사용하는 뼈대가 될 수 있는 코드의 집합을 일컫는다고 말할 수 있다.

 

-프레임 워크는?

  집을 짓기 위한 과정을 라이브러리와 프레임워크에 비유해보면, 프레임워크는 모델하우스를 짓는것에 비유할 수 있다. 모델하우스의 소파의 위치, 의자와 책상의 위치, 방의 용도 등. 우리가 수정할 수 있는 범위는 제한적이다. 주방의 위치, 기둥의 개수, 방의 개수 등 집을 이루고있는 굵직한 뼈대는 수정할 수 없다. 사용자는 모델하우스가 제공하는 청사진 안에서"만" 움직일 수 있다. 프레임워크가 제공하는 틀에 따라 코드를 작성해야 하는것이다. 즉, 통제권은 사용자가 아닌 프레임워크가 쥐고 있다. 그리고  Framework은 우리가 Application 관련 코드를 작성하면 이를 알아서 호출해주는 역할이다.

(Framework는 Application을 호출하는 Caller(발신자) 역할을한다.)

 

-라이브러리는?
라이브러리는 이케아에서 산 재료로 가구를 조립하는것에 비유할 수 있다.집에서 사용할 가구를 조립하거나 만들기 위해 벌목부터 시작해서 목공을 하거나, 가죽을 얻기위해 사냥을 하고싶은 사람은 거의 없을것이다.

그래서 이케아 혹은 가구점에 가서 기본적인 재료를 사서 입맛대로 조립하고 배치할 수 있다.

재료의 선택권이나 통제권은 사용자에게 있는 것이다. 그래서 Library는 우리가 Application 코드를 작성할 때 활용하는 도구이다. (Library는 Application입장에서 호출을 하는 Callee의 역할을 한다고 할 수 있다.)

 

-제어역전? 

  제어역전이란, 개발자가 해왔던 일(제어)을 프로그램. 즉, 프레임워크가 대신 해준다는 의미이다.  스프링과 같은 프레임워크를 사용하다보면, 스레드를 직접 만들고, 객체의 생명주기를 직접 코딩하진 않는 것 처럼.

원래 개발자가 가지고 있어야 할 객체의 제어권을 프레임워크가 대신 해준다는 의미로,
 "제어권이 역전되었다" 라는 뜻에서 제어역전 이라고 한다.

 

결론-

  1. 프레임워크와 라이브러리는 둘 다 코드 작성에 도움이 되는 타인이 작성한 코드의 집합이다.
  2. 프레임워크는 프로그램이 필요한것을 개발자에게 알려줌으로써 제어권을 역전하고, 라이브러리는 개발자가 필요할 때 마다 설치, 혹은 호출함으로써 개발자가 능동적으로 사용하게 된다.

참고자료 -프레임워크 vs 라이브러리 (velog.io)   >

 

- Package, Module, Library?

  Package, Module, Library 순으로 사이즈가 점점 더 커진다.

  • Package
    • Package는 관련 클래스 및 인터페이스 집합을 구성하는 네임스페이스입니다. Java, Kotlin에서는 개념적으로 하나의 디렉토리라고 볼 수 있습니다.
  • Module
    • Module은 패키지와 관련 리소스의 모음입니다. 하나의 작은 역할을 담당합니다.
    • 특히, Java Module은 Application 혹은 API 를 별도의 module로써 패키징하는 매커니즘입니다.
  • Library
    • Library는 기능의 집합이라 할 수 있습니다.
    • 여러 개의 모듈로 구성됩니다.
    • 예를 들어, Collections 라이브러리는 Set module, List module, Map module 등으로 구성된다고 말할 수 있습니다.

     

 

  참고사항

좋은 객체 지향 프레임 워크는? 객체들의 모임으로, 서로 메시지를 주고 받으며, 유연하고 변경(다형성)이 용이하.   다형성은 서버의 구현기능을 유연하게 변경이 가능하다. 그리고 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.(변화가 있어도 큰 틀은 안 바뀌도록 하는 것.)

다형성을 쉽게 애기하면 역할-(예 클라이언트/인터페이스등)와 구현(개발된 앱들,개발될 앱들/인터페이스를 구현한 클래스들, 구현 객체들)로 나누어보자. 구현-(예 앱들/인터페이스 등)은 시간의 흐름에 따라 변화되고 바뀌어가도, 클라이언트가  앱들(인터페이스를 구현한 클래스들, 구현 객체들)은 달라지고 기능이 바뀌어가는 앱들을 사용하는데 크게 어려움을 느끼지 않는다. 클라이언트와 서버와는 밀접한 관계가 있어야 한다.(요구가 있어야 변화가 있듯이..)

 

강의안보고 다시 읽어보고, 시간들여 관련 검색들을 했다. 그리고 강의를 다시 들었다.

 

'개발일지' 카테고리의 다른 글

2023.12.21 TIL  (0) 2023.12.21
2023.12.20 TIL  (0) 2023.12.20
2023.12.18 TIL  (0) 2023.12.18
2023.12.16 TIL  (0) 2023.12.16
2023.12.15 TIL  (0) 2023.12.15