이전 블로그에 비공개로 작성해놨던 글이 있는데, 지금은 그 차이를 명확하게 알게 되어 예전 내용과 덧붙여서 내용을 조금 더 정리해 보고자 한다.
사실 이전 블로그에서 CS 관련된 글을 조금 써놨는데 올리지 않았던 거나 가져오지 않은 게 꽤 있는데 텅 비어 있는 지금 블로그의 CS 지식 카테고리가 아쉽기도 하구 그래서~~~ ^___^ ;;
아무튼간. 꼬. 시작. 꼬.
프레임워크
먼저, 프레임워크란 일정한 형태와 필요한 기능을 갖추고 있는 뼈대를 말한다. 일종의 밀키트와 같다고 보면 되는데, 만드는 방법과 재료가 정해져 있어 우리는 그 틀에 따라 코드를 작성해야 한다. 즉, 통제권은 사용자가 아닌 프레임워크가 쥐고 있다.
앱 / 서버의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크과 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드들을 구현하면 된다.
그 예시로는 UIKit, SwiftUI, Spring, Django, Flask, Android, Angular ... 등이 있다.
라이브러리
다음으로, 라이브러리는 프레임워크와 달리 편리한 특정 기능을 모아둔 번들을 말하며, 코드 작성 시 유용하게 활용 가능한 도구를 말한다. 라이브러리의 종류를 꼽자면 언어별로, 분야별로 너무너무너무 많기에 생략한다. 라이브러리라는 말을 들었을 때, 어... 그거? 하고 생각나는 게 있다면 그게 맞을 것이다. (도서관을 떠올린 게 아니라면!!! ㅠ,ㅠ)
프레임워크와 라이브러리의 가장 큰 차이로는 흐름 제어를 누가 하느냐이다.
라이브러리를 사용하는 코드의 경우에는 사용자가 직접 흐름을 제어한다. 개발 시 필요한 기능이 있을 경우 능동적으로 라이브러리를 호출하여 사용하거나 기존에 구성된 함수를 가져다 써야 한다.
반면, 프레임워크는 프레임워크가 흐름을 직접 제어한다. 이 경우, 애플리케이션의 코드는 수동적으로 프레임워크가 짜 놓은 틀에서 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고, 그 안에 필요한 코드를 작성하게 된다.
프레임워크는 제어의 역전이라는 개념이 적용되어 있는데, 이전에는 그렇게... ... 이해가 안 됐다.
예전에 썼던 설명은 아래와 같다.
제어의 역전
프레임워크에게 제어 권한을 직접 넘김으로써 코드 작성 시 신경 써야 할 것을 줄이는 전략을 말한다. 프레임 워크를 규정하는 특성은 그 메소드가 사용자의 코드를 호출한다는 점에 있다.
뭔 소리야? 싶다.
지금 조금 더 찾아보고 이해한 제어의 역전의 개념은 아래와 같다.
iOS의 프레임워크, 즉 UIKitd의 경우를 예를 들어 보자.
우리는 UIKit 안에 정의되어 있는 UIViewController 객체를 생성하고 정의한다.
그렇다면 호출은 누가 할까?
우리가 하는 게 아니라 앱이 동작할 때 UIKit이 해당 생명주기를 관리한다.
이것이 제어의 역전이다.
,, 역시 몬 소리야? 싶겠지만 잘 들어보장.
본래 제어는 프로그래머가 라이브러리를 제어한다. SnapKit이나 Kingfisher 등 여러 라이브러리를 사용할 때면 사용자가 직접 import 한 후 해당 내용을 자유롭게 사용한다.
라이브러리가 사용자의 코드를 사용하는 일은 없다고 볼 수 있다. 우리는 라이브러리를 제어한다.
하지만, 프레임워크는 조금 말이 다르다.
iOS 개발의 경우, 우리는 UIKit, SwiftUI라는 프레임워크 안에서 정해진대로, 그 틀에 따라서 코드를 작성하고 실행할 때면 우리가 해당하는 코드를 찾아서 실행하는 로직을 짜는 것이 아니라 특정 로직을 따라서 프레임워크가 우리가 쓴 코드를 제어한다.
이것이 제어의 역전인 것이다!!!!!!!!!!!!!!!!!!
그림으로 보자면 아래와 같다.

... ... ㅁㅊ 내가 이게 이해되다니...
비밀글로 올려놓은 걸 작성했을 때는 새싹 과정을 처음 시작했을 즈음인데, 그간 그래도???? 많이 성장했구나 싶다
요즘에는 계속 쓰던 코드를 작성하는 기분이라 ㅠ,ㅠ 분발해야 할 것 같다는 생각이 든다.
의존성 주입을 조금 더 공부해 보고, 지금 하고 있는 WebSocket과 IAP를 공부해 봐야겠당.
아~~!! 다음 SLP에는 객체를 깔끔하게 정리된 빌더 패턴으로 만들어 보고 싶기 때문에 ,, ^__ ^ 일단 부지런히 손을 놀려야 할 것 같다.
빠이태잉~~!
참고 자료...
https://hudi.blog/inversion-of-control/
제어의 역전 (Inversion Of Control, IoC)
학습 동기 우아한테크코스 레벨2에서 스프링을 본격적으로 사용하면서, 스프링에서 제공하는 의존성 주입과 스프링 빈(Bean)을 접하게 되었다. 이 개념들에 익숙해지기 전 밀접하게 관련이 있어
hudi.blog
https://velog.io/@xylopeofficial/프레임워크가-갑이다-제어의-역전
프레임워크가 갑이다? 제어의 역전!
라이브러리와 프레임워크의 차이, 그리고 Spring의 주요기술중 하나인 IoC 에대해 알아봅니다!
velog.io
https://velog.io/@zinukk/framework
프레임워크? 라이브러리?
개발을 시작한 지 얼마 안 된 초보 개발자들은 "프레임워크", "라이브러리" 라는 개념을 혼동하기 쉽다고 한다. 머릿 속에 정확히 개념이 자리 잡히지 않은 상태에서 사용하는 코린이들도 많다.
velog.io