마크업 언어 및 하드웨어를 다룰 때 주의할 점
마크업 언어
마크업(mark up)은 본문(텍스트)과 구분할 수 있느 마크(mark)를 추가할 수 있는 시스템이다.
마크를 어노테이션(annotation)이라고도 부른다.
마크업 언어(Markup Language)는 문서가 화면에 표시되는 형식을 나타내거나 데이터의 논리적인 구조를 명시하기 위한 규칙들을 정의한 언어의 일종이다. 데이터를 기술한 언어라는 점에서 프로그래밍 언어와는 차이가 있다
즉, “데이터의 논리구조를 명시하기 위한 규칙들을 정의한 언어의 일종”이라는 부분에 집중해야 한다. 어떠한 데이터를 가지고 그것을 수학적으로 가지고 놀겠다는 의미가 아니라, 데이터를 화면에 표시하기 위해서 사용하는 언어라는 것이다.
참고로 HTML(Hyper Text Markup Language)은
프로그래밍 언어가 아니라 마크업 언어이다.
즉, 데이터를 화면에 표시하기 위해서 사용되는 언어이다.
VS 마크다운
마크다운(markdown)은 일반 텍스트 기반의 경량 마크업 언어다. 일반 텍스트로 서식이 있는 문서를 작성하는 데 사용되며, 일반 마크업 언어에 비해 문법이 쉽고 간단한 것이 특징이다.
확장자 명이 .md 이다
우리가 사용하는 마크다운으로는 Typora, MarkText 등이 있다.
XML
XML(eXtensible Markup Language : 확장가능한 마크업 언어)은 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어이다.
XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어 졌다.
EX) XML 예시
<select id="checkUserId" parameterType="java.lang.String" resultType="java.lang.String">
<![CDATA[
select userid
from tbl_user
where userid = #{user_id}
]]>
</select>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
하드웨어를 다룰 때 주의할 점
하드웨어를 조작하는 코드를 최적화하면 예기치 못한 문제가 발생할 수도 있다.
아래 코드는 비트0이 설정되면 전등을 켜는 하드웨어 레지스터를 변수로 조작하는 코드를 보여준다.
void
lights_on()
{
PORTB = 0x01;
return;
}
이 코드는 문제가 없다. 하지만 최적화기가 이 코드에 대해 어떤 조작을 가할까?
최적화기는 PORTB에는 값을 쓰기만하고 읽는 코드는 없다고 인식하고 이 코드를 제거해야 한다고 결정한다.
비슷하게
아래 코드는 전등을 켜고 전등이 켜진 상태인지를 검사한다.
최적화기는 그냥 PORTB에 값을 저장하지 않고 0x01을 반환하도록 이 함수를 다시 작성할 수 있다.
unsigned int
lights_on()
{
PORTB = 0x01;
return (PORTB);
}
이 두 예제는 경우에 따라 최적화를 꺼야 할 수 도 있음을 보여준다. ( 결과적으로 하드웨어를 다룰 때 주의할 점 )
전통적으로는 소프트웨어를 일반적인 파일과 하드웨어에 따라 달라지는 파일로 나누고, 일반적인 파일에 대해서만 최적화를 적용하는 식으로 이런 문제를 해결한다.
하지만 일부 언어는 최적화기에 손대지 말아야 할 부분을 알려주는 메커니즘을 제공하기도 한다
예를 들어, C언어에서 volatile 키워드는 변수에 대한 접근을 최적화하지 말라고 지정한다.
ex)
C언어 volatile
volatile int num1 = 10; // 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듦
변수를 선언할 때 앞에 volatile을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듭니다.
참고자료
https://samsara-ku.dev/common_sense/difference-between-markup-and-markdown/