c언어의 컴파일 과정에 대해 Run 버튼만 누르면 알아서 해줘서 딱히 생각이 없다가 강의를 들으면서, "원리도 모르고 쓰고 있었네?" 라는 생각이 씨게 와서 글로 남기게 됐다. 과정 0. 시작 파일 : hello.c 1. 전처리 : hello.i 수행은 전처리기가 한다. gcc(gnu compiler collection)을 이용해서 확인 가능하다. 명령어 : gcc -E hello.c -o hello.i 보통 컴파일이 책을 통으로 번역하는 작업이라 한다. 그런 관점에서 전처리는 책을 번역하기 전에 책에서 인용한 참조 문서들을 가져오는 작업이라고 할 수 있겠다. 가져오기만 하고 번역은 하기 전이다. 즉, 전처리의 결과는 아직 소스코드인 상태다. 수행 작업 파일을 읽고 외부에 선언된 다양한 소스코드,라이브러..
먼저 파일이란? 컴퓨터가 저장하고 있는 데이터라고 할 수 있다. 소켓도 파일이라고 볼 수 있다. 그리고 프로토콜이란? 정보처리기사 내용 구문, 의미, 타이밍으로 구성 데이터를 안전하게 주고 받기 위한 약속 구문 : 패킷의 데이터 구조를 어떤 구조로 만들지 약속하는 것, 프로토콜마다 다른 구조를 가지고 있다. (소켓을 이해하는데 이 부분만 있으면 될 것 같다.) 그럼 패킷은 또 뭔가 바로 소켓이라는 파일에 적히는 데이터의 형태, 즉 소켓에 담기는 데이터가 되겠다. 소켓의 형태는 위에서 설명한 프로토콜의 종류에 따라 정해진다. 마침내 소켓이란? 패킷을 담는 파일이자, 통신에 사용되는 파일, 통신에 필요한 데이터를 담는 파일 되시겠다. 서로 다른 두 컴퓨터가 있다고 가정해보자 그들은 각자 고유의 ip를 가지고..
구분선 전까지는 본 내용에 들어가기에 앞서 알고 있으면 이해하는데 도움이 될 만한 내용을 먼저 설명이다. 알고 있으면 복습겸 한번 슥 읽고 넘어가자. ASCII란? American Standard Code for Information Interchange의 약자 알파벳, 숫자, 특수 문자에 고유의 숫자를 부여한 코드표로 7Bit 조합이라 128개의 문자를 표현한다. 1byte( = 8Bit ) 에서 첫 비트는 부호로 쓰고 나머지 7Bit으로 ASCII Table에 있는 모든 알파벳, 숫자, 특수 문자를 표현할 수 있다. UTF란? Universal Coded Character Set + Transformation Format의 약자 ASCII로는 세상에 존재하는 여러 언어를 표현할 수 없어서 만든 문자표..
API개념을 공부하기 위해 자료를 찾아봤는데, 많은 자료에서 API는 메뉴판이라는 비유로 설명을 하고 있었다. 메뉴판이라는 비유가 API라는 개념에 처음 접근하기에 친숙하고 가벼우면서도, 뭔가 개인적으로는 머리에 막 와닿지는 않았다. 이참에 많이 알려진 설명들에 내가 공부하면서 이해한 내용을 추가해서 정리해보려 한다. API란? 사전적인 정의 서로 다른 프로그램들 사이에서 데이터를 주고받기 위한 방법 , 애필리케이션에서 데이터를 읽거나 쓰기 위해 사용하는 인터페이스 설명 식당가서 요리사한테 , “ 야채 썰고 , 기름에 넣어서 야채기름 낸 다음 , 고기 썰어서 같이 볶고 , 마지막으로 밥 넣고 볶아서 가져와주세요” 라고 하진 않는다. 그냥 [메뉴판]을 보고 종업원에게 “[볶음밥] 주세요” 하지 여기서 [메..
일단 추상클래스와 인터페이스는 추상메서드 없이는 설명이 불가능하기 때문에 추상메서드 먼저 살펴보자. 추상메서드란? 메서드는 선언부와 구현부로 나뉘는데 , 메서드들 중에서 선언부까지만 작성하고 구현부는 작성하지 않은 메소드를 추상메서드라고 한다. abstract를 메서드 앞에 붙여서 (정확히는 접근 제어자 앞이나 뒤에 붙여서) 추상메서드임을 명시한다. 추상메서드를 가진 클래스는 반드시 추상클래스여야 한다. 추상메서드는 구현부 즉 실행 코드가 없어서 추상메서드를 가진 클래스(추상클래스)는 인스턴스를 만들 수 없다. 추상클래스란? 구조적으로는 일반 클래스와 큰 차이는 없다. 똑같이 일반 필드 , 일반 메서드를 가질 수 있다. 차이점은 추상메서드를 가지고 있다는 것이다. abstract를 class 앞에 붙여서..
함수형 프로그래밍(Functional Programming)이란? 자료를 찾아보면서 이해하기 가장 좋았던 예시는 파이프라인이었다. 아래는 설명 전 이해를 돕기 위해한 자료로 , 내가 생각하는 함수형 프로그래밍의 기본 틀을 그림으로 표현한 것과 이미지이다. 개념 설명 파이프라인( 코딩에서는 함수 )은 input을 넣으면 input에 고정된 output을 내보낸다. 그림에서 보이다시피 외부에서는 파이프라인 안에 접근할 수도 볼 수도 없다. 마찬가지로 파이프라인 안에서도 외부에 접근하거나 볼 수 없다. 함수형 프로그래밍은 이런 파이프라인들( 함수들 )을 묶고 연결해서 프로그램을 만들어가는 프로그래밍 패러다임을 말한다. 함수형 프로그래밍의 특징 순수함수 = 함수에서 외부의 상태값을 참조하거나 외부의 상태를 변경..
DI 방법들을 알아보기에 앞서 먼저 @Autowired 어노테이션이 무엇인지 알아볼 필요가 있다. @Autowired는 사용된 위치의 변수 및 메서드에 필요한(의존하는) bean(스프링 빈)의 인스턴스를 IoC container에서 찾아 주입하는 역할을 한다. 쉽게 말해 스프링에서 의존관계 주입(DI)을 할 때 사용되는 어노테이션(Annotation)이다. 주의사항 : @Autowired는 의존 객체의 타입에 해당하는 bean을 찾아 주입한다. 그렇기 때문에 해당 타입의 bean이 없는 경우 작동하지 않는다. 또한 같은 이름의 bean이 여러 개일 경우도 있다.그럴 때는 @Primary 나 @ Qualifier(bean id) 등을 이용해서 해결할 수 있다. @Autowired 어노테이션은 기본적으로 생..
비교에 앞서 간단한 개념 설명 DTO : 순수하게 데이터 전달만을 위한 개체 getter/setter 메소드 말고 다른 로직은 없다. 가변성이 있지만 setter 메소드를 제거하고 대신 생성자로 필드에 데이터를 넣으면 불변성을 갖는다. ( 개인적으로 setter 메소드를 제거한 DTO는 반쪽짜리 VO라고 해도 무방한 것 같다. 딱 VO에서 euals(),hashCode() 만 오버라이드만 안한 상태? ) 보통 변화에 민감하지 않는 , 값을 비교할 필요 없는 데이터를 이동시킬 때 사용한다. VO : 값 그 자체를 나타내는 객체 데이터의 변화가 없는 불변성을 갖는다.( setter 메소드 사용하지 않는다. ) 서로 다른 VO여도 갖고 있는 데이터가 같으면 같은 객체라고 정의한다.(그림2 참고) , 이를 위해..