그리드 시스템 (grid system)이란?

그리드 시스템이란 화면을 몇 개의 칼럼 (column)으로 나누어 요소를 배치하도록 하는 시스템입니다. 그리드 시스템은 화면을 단순하게 만들면서 동시에 배열을 규칙적으로 할 수 있다는 장점이 있습니다.

 

고정 그리드 레이아웃 (fixed grid layout)

고정 그리드 (fixed grid)란 말그대로 그리드의 너비를 픽셀 (px)로 고정하는 것을 의미합니다. 예를 들어 그리드의 너비를 360px로 입력하였다면 화면의 크기와 상관없이 해당 그리드는 너비 360px을 유지합니다.

 

브라우저 창을 최대화하니 레이아웃 밖으로 공백이 발생한 것을 확인할 수 있습니다. 제 PC 화면의 너비와 레이아웃 너비가 다르기 때문입니다.

 

 

브라우저 창을 줄여보니 레이아웃 전체가 한 화면 안으로 들어오지 못하는 것을 확인할 수 있습니다.

 

 

<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Fixed Grid Layout</title>
<style>
    .layout {
        width:960px;
        margin:0 auto;
    }
    header {
        width:960px;
        height:100px;
        background-color:rgb(125,125,250);
        text-align: center;
    }
    section {
        float:left;
        width:600px;
        height:300px;
        background-color:rgb(125,250,250);
        text-align: center;
        padding: 70px 0 0 0;
    }
    aside {
        float:right;
        width:360px;
        height:300px;
        background-color: rgb(0,255,125);
        text-align: center;
        padding: 70px 0 0 0;
    }
    footer {
        clear:both;
        width:960px;
        height:100px;
        background-color: rgb(100,100,255);
        text-align: center;
    }
</style>
</head>
<body class="layout">
    <header>
        <h2>고정 그리드 레이아웃 (fixed grid layout)</h2>
        <p>너비 (width) : 960px (fixed)</p>
    </header>
    <section>
        <h2>본문</h2>
        <p>너비 (width) : 600px (fixed)</p>
    </section>
    <aside>
        <h2>사이드바</h2>
        <p>너비 (width) : 360px (fixed)</p>
    </aside>
    <footer>
        <h2>푸터</h2>
        <p>너비 (width) : 960px (fixed)</p>
    </footer>
</body>
</html>

 

 

 

예전에는 웹에 접속할 수 있었던 기기가 PC 뿐이었지만, 요즘에는 스마트폰, 태블릿 PC 등 다양한 기기를 사용하여 웹에 접속합니다. 그리고 그 기기들은 화면의 크기가 서로 많이 다릅니다. PC의 크기에 맞춰 레이아웃을 만들면 스마트폰이나 태블릿 PC에서는 화면이 한 눈에 들어오지 않아 보는데 불편함이 많을 것입니다.

 

가변 그리드 레이아웃 (fluid grid layout)

고정 그리드 레이아웃의 문제점을 해결하기 위해 가변 그리드 레이아웃을 사용할 수 있습니다. 고정 그리드 레이아웃은 픽셀 값으로 그리드의 너비를 고정시켜놓는다면 가변 그리드 레이아웃은 백분율을 이용하여 화면 너비에 대해 각 그리드의 너비 비율을 정할 수 있습니다. 그래서 화면의 크기 변화에 따라 그리드의 크기도 같이 변하게 됩니다.

 

창을 최대화하니 레이아웃의 너비가 창에 맞춰졌음을 알 수 있습니다.
창의 크기를 줄이니 레이아웃도 그에 맞춰서 줄어드는 것을 확인할 수 있습니다.

 

<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Fluid Grid Layout</title>
<style>
    .layout {
        width:100%;
        margin:0 auto;
    }
    header {
        width:100%;
        height:100px;
        background-color:rgb(125,125,250);
        text-align: center;
    }
    section {
        float:left;
        width:60.25%;
        height:300px;
        background-color:rgb(125,250,250);
        text-align: center;
        padding: 0.073% 0 0 0;
    }
    aside {
        float:right;
        width:39.75%;
        height:300px;
        background-color: rgb(0,255,125);
        text-align: center;
        padding: 0.073% 0 0 0;
    }
    footer {
        clear:both;
        width:100%;
        height:100px;
        background-color: rgb(100,100,255);
        text-align: center;
    }
</style>
</head>
<body class="layout">
    <header>
        <h2>가변 그리드 레이아웃 (fluid grid layout)</h2>
        <p>너비 (width) : 100%</p>
    </header>
    <section>
        <h2>본문</h2>
        <p>너비 (width) : 60.25%</p>
    </section>
    <aside>
        <h2>사이드바</h2>
        <p>너비 (width) : 39.75%</p>
    </aside>
    <footer>
        <h2>푸터</h2>
        <p>너비 (width) : 100%</p>
    </footer>
</body>
</html>

블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

베트남어 어휘의 6~70%는 한자어

 한국어의 어휘는 크게 3가지 범주 - 고유어, 한자어, 외래어 - 로 나눌 수 있습니다. 그리고 그 중에서 한자어가 전체 어휘의 6~70%를 차지합니다. 베트남어도 한국어와 마찬가지입니다. 베트남어 어휘는 고유어, 한자어, 외래어로 나뉘며, 한자어가 전체 어휘의 6~70%를 차지합니다. 따라서 한자가 베트남어에서 어떻게 사용되는지 안다면 베트남어 어휘력을 비약적으로 향상시킬 수 있을 것입니다.

 그래서 저는 베트남어에서 많이 쓰이는 한자를 추려서 뜻과 음, 그리고 해당 한자가 사용된 단어를 소개하는 시리즈를 만드려고 합니다. 


 이번 포스팅에서는 (높을 고)이라는 한자가 베트남어에서 어떻게 사용되는지 알아볼 것입니다.


(높을 고)


네이버 한자 사전에서 (높을 고)를 검색하면 아래와 같은 결과가 나올 것입니다.


 네이버 한자 사전에서는 (높을 고)가 가지는 14가지의 뜻에 대해 설명하고 있습니다. 가장 핵심이 되는 뜻은 '(높이가) 높다' 일 것입니다. 그리고 여기서 (사회적으로) 높은 위치나 지위, 고상함 등의 뜻이 파생됩니다. 

그럼 베트남어에서는 어떻게 쓰이는지 알아보겠습니다.


cao

뜻 : 높다 (trái với thấp, đáng tôn kính)

사용단어

cao quý 高貴 (고귀)

cao cấp 高級 (고급)

cao đẳng 高等 (고등)

cao cường 高强 (고강) *뜻 : (무예 등이) 일반인보다 강함

đỉnh cao 頂高 (정고) *뜻 : 높은 경지

cao nhã 高雅 (고아) *뜻 : 고귀하고 우아한


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

select 태그와 datalist 태그의 차이점

html에서 사용자로 하여금 여러 옵션 중 하나를 선택하게 할 때 사용하는 태그가 <select> 태그와 <datalist> 태그 입니다. 하지만 두 태그 사이에는 약간의 차이점이 있습니다.


<select> 태그 : 사용자는 문서 작성자가 만든 옵션 중에서만 선택이 가능하다.

<datalist> 태그 : 사용자는 입력창에 타이핑으로 직접 옵션을 선택할 수 있다.


직접 눈으로 확인해보도록 하겠습니다.


<select> 태그

    <form>
        <select>
            <option>내용 1</option>
            <option>내용 2</option>
            <option>내용 3</option>
        </select>
    </form>


<datalist> 태그

    <form>
        <input list="ex" type="text">
        <datalist id="ex">
            <option value="내용1"></option>
            <option value="내용2"></option>
            <option value="내용3"></option>
        </datalist>
    </form>



아래의 코드를 직접 실행하여 비교해보셔도 좋습니다.


<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>date</title>
</head>
<body>
    <form>
        <label id="selectTag">select tag</label>
        <select id="selectTag">
            <option>내용 1</option>
            <option>내용 2</option>
            <option>내용 3</option>
        </select>
    </form>
    <hr>
    <form>
        <label id="datalistTag">datalist tag</label>
        <input list="ex" type="text" id="datalistTag">
        <datalist id="ex">
            <option value="내용1"></option>
            <option value="내용2"></option>
            <option value="내용3"></option>
        </datalist>
    </form>
</body>
</html>


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

<map>, <area> 태그를 활용하여 하나의 이미지에 링크 여러개 달기

<map> 과 <area> 태그를 활용하면 이미지 하나에 링크를 여러개 삽입할 수 있습니다. 


그림판을 이용하여 정말 간단하게 이미지 파일 하나를 만들어 보았습니다.

안에 facebook이라 적혀있는 사각형을 클릭하면 facebook 사이트로 연결되고, 안에 google이라 적혀있는 원을 클릭하면 google 사이트로 연결되도록 만들어 보겠습니다.


<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>map, area 태그를 활용하여 하나의 이미지에 링크 여러개 달기</title>
</head>
<body>
  <h1>map, area 태그를 활용하여 하나의 이미지에 링크 여러개 달기</h1>
  <img src="example.png">
</body>
</html>


먼저 <img> 태그를 활용하여 이미지를 삽입합니다.


<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>map, area 태그를 활용하여 하나의 이미지에 링크 여러개 달기</title>
</head>
<body>
  <h1>map, area 태그를 활용하여 하나의 이미지에 링크 여러개 달기</h1>
  <map name="linkExample">
      <area shape="rect" coords="55, 84, 214, 243" href="https://www.facebook.com/" alt="Facebook">
      <area shape="circle" coords="450, 160, 95" href="https://www.google.com/" alt="Google">
  </map>
  <img src="example.png" usemap="#linkExample">
</body>
</html>


그 후 <map> 태그를 만들고 그 안에 <area> 태그를 만듭니다. <map> 태그에는 이름을 붙여줘야 어떤 이미지에 대해 링크를 달 것인지 정할 수 있으므로 이름을 지어줘야 합니다. 저는 linkExample 이라고 지었습니다.

그 다음으로 <img> 태그 안에 usemap이라는 속성을 지정하고 그 안에 <map> 태그의 이름인 linkExample을 넣어주었습니다. 단, 여기서 주의해야할 점은 이름 앞에 반드시 #을 넣어야 한다는 점입니다.


<area> 태그 안의 속성들을 살펴보면, shape는 모양, coords는 좌표, href는 링크, alt는 이미지가 깨졌을 때 원활한 설명을 위해 대신 나오는 문구 입니다.

여기서 좌표를 어떻게 구하냐 의문이 들 수 있는데, 좌표는 그림판을 이용하여 쉽게 구할 수 있습니다.


이미지 파일을 그림판에서 열고 이미지부분에 마우스를 대면 그림판 좌측 아래 부분에 좌표가 뜹니다. 

사각형의 경우 coords="좌표 1의 x값, 좌표 1의 y값, 좌표 2의 x값, 좌표 2의 y값"이며,

원의 경우 coords="좌표 1의 x값, 좌표 1의 y값, 원의 반지름" 입니다. 



원의 반지름은 그림판에서 빨간색 박스 부분을 통해 구할 수 있습니다.


example.zip

첨부한 파일의 압축을 풀고 열어서 직접 확인해보시면 더 쉽게 이해가 갈 것입니다.



블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

table(표) 만들기

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>표 만들기</title>
</head>
<body>
  <h1>표만들기</h1>
  <table border="1">
    <tr>
        <th>1행1열</th>
        <th>1행2열</th>
        <th>1행3열</th>
        <th>1행4열</th>
    </tr>
    <tr>
        <td>2행1열 (내용)</td>
        <td>2행2열 (내용)</td>
        <td>2행3열 (내용)</td>
        <td>2행4열 (내용)</td>
    </tr>
  </table>
</body>
</html>


위처럼 코드를 작성한 뒤 실행해보면 아래와 같이 표가 출력될 것입니다.

html에서 표를 만들 때는 표에 해당하는 내용을 <table> </table> 태그 안에 작성하게 됩니다.

따라서 <table> 태그는 하나의 표를 선언하는 역할을 한다고 볼 수 있겠습니다.


행을 만드는 역할은 <tr>태그가 수행하며, 열은 <th> 또는 <td> 태그로 만들 수 있습니다.

참고로 html에서는 행을 먼저 만든 후 행 안에 열을 만드는 방식으로 표를 만듭니다. 따라서 <th>, <td> 태그는 <tr> 태그 안에 들어가게 됩니다.

한편, <td> 태그 안에 작성한 내용은 글씨 굵기가 변동되지 않고, 정렬도 왼쪽으로 됩니다. 반면에 <th> 태그 안에 작성한 내용은 볼드체에 중앙으로 정렬이 됩니다. 그래서 <th> 태그는 제목셀을 만들 때 주로 사용됩니다.



<thead>, <tbody>, <tfoot> 태그


표를 만들면 일반적으로 위의 스크린샷 처럼 제목, 내용, 내용요약 부분으로 나뉘게 됩니다. (*해당 표는 excel로 만든 표입니다.)

따라서 제목, 내용, 요약 부분의 색깔이나 폰트 등을 서로 다르게 해야하는 경우도 종종 있을 것 입니다. 이럴때 사용하는 것이 <thead>(제목), <tbody>(내용), <tfoot>(요약) 태그입니다.

표에 있는 행들을 <thead>, <tbody>, <tfoot> 태그로 묶은 후, CSS나 Javascript를 이용하여 서로 다르게 편집할 수 있습니다. 이번 포스팅은 html 기초에 대한 글이므로 실제로 해당 태그들을 이용하여 편집하는 것은 차후 CSS, Javascript에 대한 포스팅에서 다루도록 하겠습니다.


<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>표 만들기</title>
</head>
<body>
  <h1>표만들기</h1>
  <table border="1">
    <thead>
        <tr>
            <th>제목 행</th>
            <th>제목 행</th>
            <th>제목 행</th>
            <th>제목 행</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>내용 행</td>
            <td>내용 행</td>
            <td>내용 행</td>
            <td>내용 행</td>
        </tr>
    </tbody>
    <tbody>
        <tr>
            <td>요약 행</td>
            <td>요약 행</td>
            <td>요약 행</td>
            <td>요약 행</td>
        </tr>
    </tbody>
  </table>
</body>
</html>



<col>, <colgroup> 태그

<thead>, <tbody>, <tfoot> 태그는 행을 기준으로 표를 나누었다면, <col>, <colgroup> 태그는 열을 기준으로 표를 나누는 태그입니다. <col>, <colgroup> 태그를 통해 열을 나누었다면, 나뉜 열에 스타일을 다르게 지정할 수 있습니다. 


<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>표 만들기</title>
</head>
<body>
  <h1>표만들기</h1>
  <table border="1">
        <colgroup>
            <col span="2" style="background-color: green;">
            <col style="background-color: pink;">
            <col style="background-color: brown;">
        </colgroup>
        <tr>
            <td>1행1열</td>
            <td>1행2열</td>
            <td>1행3열</td>
            <td>1행4열</td>
        </tr>
        <tr>
            <td>2행1열</td>
            <td>2행2열</td>
            <td>2행3열</td>
            <td>2행4열</td>
        </tr>
        <tr>
            <td>3행1열</td>
            <td>3행2열</td>
            <td>3행3열</td>
            <td>3행4열</td>
        </tr>
  </table>
</body>
</html>


<table> 태그 바로 아래에 <colgroup> 태그를 작성 한 다음, <col> 태그를 이용해 열 하나 하나에 대해 스타일을 지정하는 방식입니다. 위의 코드엔 4개의 열이 있으므로 <col> 태그를 4개 선언해야할 것입니다. 하지만 span을 이용하면 여러개의 열을 동시에 지정할 수 있습니다. 저는 첫번째 <col> 태그에서 span=2 라고 했기 때문에 3개의 <col> 태그만 사용할 수 있었습니다. 이제 코드를 실행하면 아래와 같이 결과가 나올 것입니다.



블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

HTML의 기본 구조

인터넷에서는 수많은 웹페이지들을 볼 수 있습니다. 그 웹페이지들이 웹페이지의 모습을 보이도록 해주는 컴퓨터 언어가 바로 HTML, CSS, Javascript 입니다. 


그 중, HTML은 웹페이지의 구조를 만드는 역할을 하며, CSS는 디자인적인 부분을 담당합니다. Javascript는 팝업창 같은 동적인 부분들을 구현하는 역할을 합니다. 이 글에서는 그 중 HTML에 대해서만 살펴보도록 하겠습니다.


HTML 문서를 보면 크게 4부분으로 나누어 볼 수 있습니다. 미리 각 부분들의 역할을 알아두면 이후 HTML에 대해 본격적으로 배울 때 이해하기가 더 쉬울 것입니다.


<!doctype html>
<html lang="ko">
    <head>
        <meta charset="utf-8">
        <title>기본 HTML 문서</title>
    </head>
    <body>
        <h1>시간이란?</h1>
        <img src="images/watch.jpg">
        <p>내일 죽을 것처럼 오늘을 살고 영원히 살 것처럼 내일을 꿈꾸어라.</p>
    </body>
</html>


그 전에 태그(tag)라는 개념에 대해 먼저 알아보겠습니다. <>로 표시되는 글자들 ex. <body>, <html> 등을 태그라고 부릅니다. 이러이러한 작업을 수행하거나 웹페이지에 이러이러하게 나타나도록 알려주는 명령어라고 생각하면 되겠습니다.



먼저 <!doctype> 태그입니다. 

위의 작성된 코드에서 가장 윗부분을 보면 <!doctype html>이라 작성된 것을 볼 수 있습니다. 이것은 해당 html문서의 속성을 알려주는 역할을 합니다. 위의 코드를 보면 !doctype이 html이니 컴퓨터가 해당 문서를 읽을 때, html로 간주하고 읽을 것입니다. 참고로 html5 이전에는 !doctype이 여러가지가 있었지만, html5로 넘어가면서 html만 남게 되었습니다.  


그 다음으로는 <html> 태그입니다.

<html> 태그는 해당 웹문서의 시작과 끝을 알려주는 역할을 합니다. 따라서 <html> </html>로 감싸진 부분을 웹문서 하나 라고 볼 수 있겠습니다.


3번째로는 <head> 태그입니다.

<head> 태그는 <html> 태그 안에 들어있는데, 웹브라우저가 해당 문서를 읽을 때 필요한 정보를 담고 있는 부분입니다. 문자 인코딩 방법, 웹문서 제목 같은 것을 정할 수 있습니다. 


마지막으로는 <body> 태그입니다.

<body> 태그도 <html> 태그 안에 들어있습니다. <head> 태그가 웹브라우저에게 필요한 정보를 알려주는 역할을 한다면, <body> 태그는 겉으로 보여지는 부분을 만드는 역할을 합니다. 따라서 웹페이지를 열었을 때 우리가 보는 부분들은 모두 <body>태그 안에서 작성된 내용이라고 생각하면 되겠습니다. 

블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

파이썬에서는 리스트 안에 for 반복문, if 구문을 넣어 코드를 간략화할 수 있습니다. 마찬가지로 딕셔너리 안에도 for 반복문, if 구문을 넣어 코드를 간략화 할 수 있습니다.


dictionary에 for 반복문 넣기 (list가 주어진 경우)


students = ["student a", "student b", "student c", "student d", "student e"]

students라는 리스트가 주어져 있습니다. 이제 리스트 안에 있는 5명의 학생에게 50~100 사이의 점수를 랜덤하게 부여하는 딕셔너리를 만들려고 합니다.


import random
students = ["student a", "student b", "student c", "student d", "student e"]

scores = {student:random.randint(50,100) for student in students}

print(scores)


위와 같이 딕셔너리를 만들 수 있습니다.


코드의 구조를 보면 아래와 같습니다.

variable = {key : value for key in list}


dictionary에 for 반복문 넣기 (dictionary가 주어진 경우)

students = {"student a" : 90,
"student b" : 80,
"student c" : 70,
"student d" : 60,
"student e" : 50}

이번에는 딕셔너리에 있는 학생 5명의 점수를 일괄적으로 10점 올려보도록 하겠습니다.

students = {"student a" : 90,
"student b" : 80,
"student c" : 70,
"student d" : 60,
"student e" : 50}

add_scores = {student : score + 10 for (student, score) in students.items()}

print(add_scores)

위와 같이 코드를 작성하여 모든 학생의 점수를 일괄적으로 10점 올렸습니다.


코드의 구조를 보면 아래와 같습니다.

variable = {new_key : new_value for (key, value) in dictionary.items()}

*딕셔너리 이름 뒤에는 .items()를 붙여야 에러가 발생하지 않습니다.



dictionary에 if 구문 넣기


이번에는 바로 위에서 만든 딕셔너리에서 점수가 80점 이상인 학생만 골라내 새로운 딕셔너리를 만들어 보겠습니다. 

students = {"student a" : 90,
"student b" : 80,
"student c" : 70,
"student d" : 60,
"student e" : 50}

add_scores = {student : score + 10 for (student, score) in students.items()}

passed_students = {student : score for (student, score) in add_scores.items() if score >= 80}

print(passed_students)

위의 코드 처럼 딕셔너리 안에 if 구문을 넣으면 점수가 80점 이상인 학생만 골라낼 수 있습니다.


코드의 구조를 보면 아래와 같습니다.

variable = {new_key : new_value for (key, value) in dictionary.items() if statement}


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

 list에 for 반복문 넣기

1, 2, 3, 4, 5, 6, 7, 8, 9, 10 이라는 숫자들로 리스트를 만드려면 보통 아래와 같이 코드를 작성할 것입니다.

numbers = []
for i in range(1, 10+1):
numbers.append(i)

print(numbers)



위의 방식을 이용하면 3줄의 코드를 작성하여 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 라는 리스트를 만들 수 있습니다. 하지만 파이썬에서는 단 한줄의 코드만으로 똑같은 리스트를 작성할 수 있습니다.


numbers = [n for n in range(1, 10+1)]

print(numbers)

위의 코드처럼 리스트 안에 for 반복문을 넣으면 단 한줄의 코드만으로도 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 라는 리스트를 만들 수 있습니다.


for 반복문이 안에 들어가는 리스트의 구조는 아래와 같습니다.

variable = [<result> for <each value in the list> in <how many times will loop>]


list에 if 구문 넣기

numbers = [1, 2, 4, 523, 9, 11, 32, 6]

이번엔 위의 리스트에서 짝수만 골라서 새로운 리스트를 선언해보려고 합니다. if 구문을 이용하면 짝수만 골라낼 수 있을 것입니다. 여기서 만약 if 구문을 리스트 안에다 넣을 수 있다면 작성할 코드의 숫자를 줄일 수 있을 것입니다.


numbers = [1, 2, 4, 523, 9, 11, 32, 6]

even_numbers = [n for n in numbers if n % 2 == 0]

print(even_numbers)


if 구문이 안에 들어가는 리스트의 구조는 아래와 같습니다.

variable = [<result> for <each value in the list> in <how many times will loop> if statement]


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

with 구문

파이썬에서는 확장자가 .py가 아닌 다른 파일도 읽어보거나 수정할 수 있습니다. (ex. .txt, .docx 파일) 이것을 가능하게 해주는 구문이 with 구문입니다.


먼저 위와 같이 .txt 파일 하나와 .py 파일 하나를 생성했습니다.

그 후, example.txt 파일 안에 아래와 같이 글자를 적고 저장했습니다.


이제 파이썬에서 example.txt의 내용을 읽어보도록 하겠습니다.


read, readline, readlines 함수

with open("example.txt") as greeting:
a = greeting.read()
print(a)

여기서 open 함수는 example.txt 파일을 연다는 뜻이며, as 구문은 example.txt 파일의 해당 파이썬 파일에서 쓸 변수 이름을 정해주는 역할을 합니다. 여기서는 as greeting이라 했으므로, example.txt는 greeting이라는 변수 이름을 얻었습니다.

마지막으로 read 함수는 example.txt의 내용을 출력해주는 역할을 합니다.


with open("example.txt") as greeting:
a = greeting.readline()
b = greeting.readline()
c = greeting.readline()
print(a)
print(b)
print(c)

readline 함수는 example.txt의 내용을 한줄씩 출력해주는 함수 입니다.

따라서 위의 코드에서 각각 변수 a는 Hello, 변수 b는 Hi, 변수 c는 Nice to meet you를 의미하게 됩니다.


with open("example.txt") as greeting:
a = greeting.readlines()
print(a)

readlines 함수는 example.txt의 내용 한줄 한줄을 리스트 안에 넣어주는 함수입니다.



with 구문의 3가지 모드 (read, write, append)

with 구문에는 3가지 모드가 있습니다. 읽기(read), 쓰기(write), 추가하기(append) 모드가 바로 그것입니다. 3가지 모드의 특성은 아래와 같습니다.


 mode ="r"(read)

읽기만 가능 

 mode="w"

(wirte)

쓰기만 가능 (*기존 내용에 덮어쓰기만 가능)

 mode="a"

(append)

쓰기만 가능 (*기존 내용에 추가하여 작성하기만 가능)


그럼 write모드를 이용하여 example.txt의 내용을 수정해보겠습니다.

with open("example.txt", mode="w") as greeting:
a = greeting.write("xin chao")

example.txt의 기존 내용은 모두 사라지고 xin chao라는 글자로 바뀐 것을 확인할 수 있습니다.

(*xin chao는 베트남어로 안녕하세요 라는 뜻입니다.)


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

상속(inheritance)

클래스에는 상속(inheritance)이라는 개념이 있습니다. 두개 이상의 클래스가 있을 때, 상위에 있는 클래스가 하위에 있는 클래스에게 자신의 기능을 물려주는 것을 뜻합니다.


Example

class Korea(상위 클래스)가 가지고 있는 함수

population, ethnic_composition, who_has_sovereignty


class Seoul(하위 클래스)가 가지고 있는 함수

specialty, ethnic_composition, who_has_sovereignty


-> class Korea의 ethnic_composition, who_has_sovereignty 함수는 class Seoul이 가진 동일 이름의 함수와 값이 같음(*한국과 서울의 민족 구성 및 주권 소재는 같기 때문). 따라서 class Korea의 ethnic_composition, who_has_sovereignty는 class Seoul에 물려줄 수 있음.


이 때, 상위에 있는 class Korea는 super class(부모 클래스)라 하며, 하위에 있는 class Seoul은 sub class(자식 클래스)라고 부릅니다.


super class(부모 클래스) 와 sub class(자식 클래스)

이제 실제로 코드를 작성해보겠습니다.

super class로 class Mammal을, sub class로 class Human을 만들어 보겠습니다.

class Mammal:
def __init__(self):
print("Mammals")

def legs_arms(self):
self.legs = 2
self.arms = 2
print("Mammals have 2 legs and 2 arms")

def breathe(self):
print("Mammals inhale O2, exhale CO2")

class Human(Mammal):
def __init__(self):
super().__init__()
print("Humans")

def read_write(self):
print("Humans can read and write")

mammal = Mammal()
print()
human = Human()

실행결과는 아래와 같습니다.

class Mammal을 실행하니 Mammals이라 출력되었습니다.

그런데 class Human을 실행하니 Mammals 와 Humans가 같이 출력되었습니다. __init__ 함수에 Mammals를 프린트하라는 지시가 없었는데도 말입니다.


그 이유는 class Human의 __init__ 함수에 super class인 class Mammal의 __init__ 함수를 상속해주었기 때문입니다. ( super().__init__() )

그래서 class Human을 실행하면 class Mammal로 부터 상속받은 Mammals와 class Human 자체가 가지고 있는 Humans가 같이 출력된 것입니다.


그럼 혹시 class Mammal이 가진 모든 method들을 상속 받을 수 있을까요?


class Mammal:
def __init__(self):
print("Mammals")

def legs_arms(self):
self.legs = 2
self.arms = 2
print("Mammals have 2 legs and 2 arms")

def breathe(self):
print("Mammals inhale O2, exhale CO2")

class Human(Mammal):
def __init__(self):
super().__init__()
print("Humans")

def read_write(self):
print("Humans can read and write")

mammal = Mammal()
print()
human = Human()
print()
human.legs_arms()
human.breathe()

class Mammal의 legs_arms, breathe 함수를 class Human에게 주어 실행시켜보니 잘 실행됨을 확인할 수 있습니다.


class Mammal:
def __init__(self):
print("Mammals")

def legs_arms(self):
self.legs = 2
self.arms = 2
print("Mammals have 2 legs and 2 arms")

def breathe(self):
print("Mammals inhale O2, exhale CO2")

class Human(Mammal):
def __init__(self):
super().__init__()
print("Humans")

def read_write(self):
print("Humans can read and write")

mammal = Mammal()
print()
human = Human()
print()
mammal.read_write()

반면에 class Mammal에 없는 read_write 함수를 class Mammal에게 주고 실행시켜보니 에러가 발생합니다. sub class의 함수는 super class에 적용되지 않음을 확인할 수 있습니다. 


상속은 일반적으로 부모에서 자식에게 물려주는 것이지, 자식에서 부모로 물려주는 일은 아닙니다. 이 점을 생각하면 왜 위의 실행결과가 나오는지 쉽게 이해할 수 있습니다.



블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,