'2018/09'에 해당되는 글 40건

  1. 2018.09.30 HTML 기본 문법 3
  2. 2018.09.29 자바 가비지 컬렉션(Java Garbage Collection)
  3. 2018.09.28 SELECT, ORDER BY 사용법 3
  4. 2018.09.27 안드로이드 설정 화면 호출 3
  5. 2018.09.26 C++ 벡터 사용법 2

HTML 기본 문법



안녕하세요 열코입니다.

이번 시간에는 HTML 기본 문법에 대해 알아보겠습니다.

먼저 HTML은 HyperText Markup Language의 약자로 웹페이지를 구성하는 마크업 언어입니다.

자바 스크립트와 CSS 등을 같이 사용하여 본문과 외관의 배치를 정의할 수 있습니다.

현재 HTML은 5버전까지 출시되었습니다.


HTML은 기본적으로 요소로 구성 되어 있습니다.

요소는 시작 태그와 종료 태그의 쌍으로 구성 되어 있으며, 

태그는 <>(꺾쇠 괄호)로 둘러싸인 키워드입니다.


아래는 태그의 가장 기본적인 형태입니다.

<head>

<title>제목</title>

</head>


다른 언어들과 같이 HTML에서도 주석을 사용할 수 있습니다.

주석은 코드를 이해하는데 도움을 주며, 웹 페이지에는 표시되지 않습니다.

아래는 주석 사용 방법입니다.


<!-- 설명... -->


이와 같이 주석은 <!-- 로 시작해서 --> 로 끝나며, 사이에 설명을 적어놓으면 됩니다.



아래는 주요 HTML 요소들입니다.

<br> : 줄 바꾸기

<p> : 단락 바꾸기

<hr> : 가로줄

<center> ... </center> : 가운데 정렬

<font> ... </font> : 폰트 변경

<ul><li> ... <li> ... </ul> : 순서없는 목록(동그라미)

<ol><li> ... <li> ... </ol> : 순서있는 목록(숫자)

<table> ... </table> : 표 만들기

<tr> ... </tr> : 행

<td> ... </td> : 열


또한 HTML은 하이퍼텍스트를 지원합니다.

하이퍼텍스트(Hypertext)란 쉽게 말해 링크(Link)입니다. (하이퍼링크)

보통 블로그에 글을 써서 링크를 걸거나, 웹사이트에서 링크를 걸면 파란색으로 글씨가 바뀌고 밑줄이 그입니다.

요거 < 이게 바로 하이퍼텍스트입니다.

HTML에서는 a태그를 사용하여 하이퍼텍스트를 사용할 수 있습니다. 

<a> ... </a> 이런식으로 사용합니다.


a태그의 속성은 다음과 같습니다.

href : hypertext reference의 약자입니다. 연결할 주소(절대 주소 또는 상대 주소)를 지정합니다.

예 : <a href="https://yeolco.tistory.com">열코의 프로그래밍 일기</a>


target : 지정된 href 주소를 보여줄 때 넣어줄 설정입니다.

- target = "_self" : 현재 브라우저에서 링크를 연결합니다.

- target = "_blank" : 새 창에서 링크를 연결합니다.

- target = "_top" : 현재 브라우저의 가장 위쪽으로 스크롤합니다.

(위로가기 버튼에 가장 많이 쓰이며, top 속성을 주었을 때 href는 사용 불가능합니다.)


title : 마우스를 링크위에 올려두면 나오는 설명입니다.

예 : <a href="https://yeolco.tistory.com" title="누르면 이동합니다.">열코의 프로그래밍 일기</a>


id : href 속성으로 링크가 아닌 현재 페이지에서 이동할 때 사용합니다.(#링크 사용)

예 : <a href="#here">이동</a>

<a id ="here">여기</a>



다음은 li 사용법입니다.

li는 list의 약자로 목록을 만들 때 <li> 태그를 사용합니다.

ul또는 ol을 사용하여 목록을 만들 수 있으며 ul은 순서가 없는 목록, ol은 순서가 있는 목록입니다.

아래와 같이 사용 할 수 있습니다.

<html>

<body>

<ol> 

<li>a

<li>b

<li>c 

</ol>

<ul> 

<li>가

<li>나

<li>다 

</ul>

</body>

</html>


위 코드의 실행 결과 아래 사진과 같습니다.

순서가 있는 ol 태그의 경우 숫자로 순서가 매겨지며, 순서가 없는 ul 태그의 경우 검은 동그라미로 마킹됩니다.



이번시간에는 HTML의 기본 문법에 대해서만 알아보았습니다.

다음시간에 더 심층적인 문법에 대해 알아보겠습니다.



이상 ''에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.




안녕하세요 열코입니다.

이번시간에는 자바의 가비지 컬렉션에 대해 알아보겠습니다.


우리가 C/C++ 프로그래밍을 할 때 메모리 누수(Memory Leak)를 막기 위해 객체를 생성한 후 

사용하지 않는 객체를 파괴(메모리 해제)를 프로그래머가 직접 해주어야 했습니다.


하지만 Java에서는 JVM(Java Virtual Machine)이 구성된 JRE(Java Runtime Environment)가 

제공되며 JVM 구성 요소 중 하나인 가비지 컬렉션(Garbage Collection)이 자동으로 

사용하지 않는 객체를 파괴합니다.


JVM의 가비지 컬렉션은 다음과 같은 단계로 메모리 해제 작업을 수행합니다.

1. 마킹 작업 : 사용중인 메모리와 사용 하지않는 메모리를 식별합니다.

2. 일반 삭제 : 참조되지 않는 객체를 제거하고 빈 공간에 대한 포인터를 남겨둡니다.

+ 압축 삭제 : 삭제 된 객체 외 나머지 객체를 메모리 공간을 효율적으로 사용하며 삭제


또한 JVM의 가비지 컬렉션은 객체들을 세대로 나누어 처리합니다.

- 젊은 세대 : 새로운 모든 객체를 할당하는 곳입니다. 젊은 세대가 가득차면 가비지 컬렉션을 수행하며 

매우 빠른 속도로 진행됩니다. 사소한(가벼운) 가비지 컬렉션이 수행됩니다.

- 이전 세대 : 오랫동안 생존한 객체를 저장합니다. 젊은 세대에서 생성된 객체에 임계 값을 주어지고 어느정도

연령에 도달하면 이전 세대로 이동합니다. 이전 세대의 객체를 수집하는 것을 주요 가비지 컬렉션이라고 합니다.


세대 별 가비지 컬렉션은 다음과 같은 과정으로 수행됩니다.

1. 새로운 객체는 에덴(Eden) 공간에 할당되며, 그 외 두 개의 생존 공간이 모두 비어있는 상태입니다.

2. 에덴 공간이 가득차게 되면 사소한(가벼운) 가비지 컬렉션이 시작됩니다.

3. 참조된 객체는 첫번째 생존 공간으로 이동되며 참조되지 않는 객체는 모두 삭제됩니다.

4. 가비지 컬렉션이 수행되는 동안 첫번째 생존 공간의 객체들은 특정 임계값이 넘어가면 두번째 생존 공간으로 이동합니다.

5. 두 번째 생존 공간의 객체들도 특정 임계값이 넘어가면 이전 세대로 넘어가게 됩니다.

6. 이전 세대의 객체가 일정 크기 이상 수집되면 주요 가비지 컬렉션이 수행됩니다.


또한 다음과 같이 JVM에게 가비지 컬렉션을 실행하도록 요청할 수 있습니다.

System.gc() 메소드 또는 Runtime.getRuntime().gc() 메소드 사용 (수행되는 가비지 컬렉션은 동일합니다.)



아래는 객체를 가비지 컬렉션의 대상으로 만드는 방법입니다.

1. 메소드 내부에서 생성된 객체

class GCTest {

String name;

public GCTest(String name) {

this.name = name;

}


static void show() {

GCTest gct1 = new GCTest("gct1");

show2();

}

static void show2() {

GCTest gct2 = new GCTest("gct2");

}


public static void main(String[] args) {

show();

System.gc(); //  gct1과 gct2는 가비지 컬렉션의 대상이 됨.

}

}

위 코드와 같이 메소드가 호출된 후 내부에 일부 객체가 만들어지고 메소드가 종료됬을 때, 메소드 내부의 객체들은

익명이 되어 가비지 컬렉션의 대상이 됩니다.


2. 참조 변수 재 지정

Class GCTest {

String name;

public GCTest(String name) {

this.name = name;

}


public static void main(String[] args) {

GCTest gct1 = new GCTest("gct1");

GCTest gct2 = new GCTest("gct2");


gct1 = gct2;


System.gc();

}

}

위 코드는 한 객체의 참조가 다른 객체를 참조할 때 이전 객체는 더 이상 참조를 갖지 못해 가비지 컬렉션의 대상이 됩니다.


3. 참조 변수 무효화

Class GCTest {

String name;

public GCTest(String name) {

this.name = name;

}


public static void main(String[] args) {

GCTest gct1 = new GCTest("gct1");


gct1 = null;


System.gc();

}

}

위 코드는 객체의 참조 변수가 null로 변경되었기 때문에 가비지 컬렉션의 대상이 됩니다.



4. 익명 객체

Class GCTest {

String name;

public GCTest(String name) {

this.name = name;

}


public static void main(String[] args) {

new GCTest("gct1");


System.gc();

}

}

익명 객체의 참조는 어느곳에도 저장되지 않기 때문에 가비지 컬렉션의 대상이 됩니다.



이상 '자바 가비지 컬렉션'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





안녕하세요 열코입니다.


SELECT는 SQL에서 가장 일반적으로 사용되는 문으로, 데이터 베이스에서 데이터를 검색해서 가져오는데 사용됩니다.

SELECT문을 통해 전체 테이블을 가져오거나 규칙을 지정하여 테이블의 일부만 가져올 수 있습니다.

반환 된 데이터는 결과 테이블에 저장되며 이 테이블을 결과 집합이라고 합니다.


기본적인 사용 구문


SELECT 필드명1, 필드명2, 필드명3 ... FROM 테이블명 


필드(컬럼)명은 하나 또는 여러개가 될 수 있으며 콤마(,)로 구분해서 사용합니다.

또한 테이블의 전체를 가져오려면 필드명에 *를 사용합니다. 


SELECT * FROM 테이블명


SELECT문에서 SELECT와 FROM은 필수적으로 사용되는 절이며, 나머지 기타 절은 선택사항입니다.

(기타절 : WHERE, GROUP BY, HAVING, ORDER BY)



☞ WHERE절 사용법

WHERE절은 검색 이외에 갱신(UPDATE), 삭제(DELETE)문에서도 사용할 수 있으며 행을 식별하는 

탐색 조건을 지정합니다. 탐색조건은 하나이상이 될 수 있으며 다음과 같이 사용 가능합니다.


SELECT 필드명 FROM 테이블명 WHERE 조건


위와 같이 WHERE을 SELECT문에 배치해서 사용합니다. WHERE에서 사용되는 조건은 보통 

비교 연산자 및 NOT 키워드를 사용합니다.

한가지 예를 들면 다음과 같은 테이블이 있다고 가정합니다.


[테이블 명 : 학생]

이름

 나이

점수

A

 24

90

B

 28

85

C

 34

80


이름, 나이, 점수 순으로 필드가 존재하는 위와 같은 테이블에서

85점 이상의 사람의 이름을 검색하고 싶을 때

다음과 같이 쿼리문을 작성합니다.


SELECT 이름 FROM 학생 WHERE 점수 >= '85'


결과는 다음과 같습니다.


이름

A

B


SQL에서 WHERE문에서 사용할 수 있는 비교 연산자는 다음과 같습니다.

<(초과), >(미만), =(같다), <=(이상), >=(이하), !=(같지않다)



또한 다른 언어들과 마찬가지로 AND와 OR 연산자를 지원합니다.

- AND는 AND앞과 뒤의 조건을 모두 만족해야 할 때 사용하며,

- OR는 OR 앞과 뒤 중 하나또는 모두 만족 할 때 사용됩니다.


더 나아가 여러 탐색 조건을 수행 할 수 있습니다.

- BETWEEN ~ AND : 두개의 다른 값 사이의 값이 충족되도록 조건을 지정합니다.

- IN : 값을 나열하여 나열한 값 사이에 있는 행을 모두 찾도록 조건을 지정합니다.

- EXISTS : 특정 행이 존재하는지 조건을 지정합니다.

- IS NULL : 널 값에 대한 테스트를 위해 사용합니다.



☞ ORDER BY 사용법

SELECT를 이용하여 출력 할 때 ORDER BY를 이용하여 테이블을 정렬 할 수 있습니다.

기준 튜플을 지정하고 오름차순, 내림차순을 설정할 수 있습니다.

예를 들어 다음과 같은 테이블이 존재한다고 가정합니다.


[테이블명 : 회원]

이름

전화번호

나이

A

010-1234-5678

15

B

010-2342-2341

27

C

010-3246-5436 

21

D

010-8923-8435

33

E

010-2464-9314

12


위 테이블에서 나이가 20살 이상인 사람들의 이름과 전화번호, 나이를 출력하려고 합니다.

다음과 같은 쿼리문을 사용하면 되겠죠?


SELECT * FROM 회원 WHERE 나이 >= '20'


쿼리문 실행 결과 아래와 같이 출력될 것입니다.



[테이블명 : 회원]

이름

전화번호

나이

B

010-2342-2341

27

C

010-3246-5436 

21

D

010-8923-8435

33


하지만 별로 보기가 좋지 않네요,

나이를 오름차순으로 정렬 하고 싶습니다.

다음과 같이 order by를 사용하여 정렬 할 수 있습니다.


SELECT * FROM 회원 WHERE 나이 >= '20' ORDER BY 나이


아래 결과를 확인해보세요.


[테이블명 : 회원]

이름

전화번호

나이

C

010-3246-5436

21

B

010-2342-2341

27

D

010-8923-8435

33


나이를 오름차순으로 정렬하여 출력한 결과입니다.

훨씬 보기 깔끔하네요~


내림차순으로 정렬하고 싶으면 맨 끝에 DESC를 추가하면 됩니다.


SELECT * FROM 회원 WHERE 나이 >= '20' ORDER BY 나이 DESC



이렇게 말이죠.



이상 'SELECT 사용법'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.







안녕하세요 열코입니다.


프로그램 개발 중에 설정 화면을 불러와야 하는 상황이 발생할 수도 있죠?

이번에는 안드로이드 프로그래밍 중 설정 화면을 호출하는 방법에 대해 알아보겠습니다.


저는 먼저 activity_main.xml에 버튼을 아래와 같이 추가했습니다.


<Button

            android:layout_gravity="center_horizontal"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/setting_btn"

            android:text="설정 버튼">

</Button>


위 코드에 대해 잠깐 설명하자면,

android:layout_gravity="center_horizontal" : 버튼을 레이아웃의 중앙에 정렬합니다.

android:layout_width="wrap_content" : 버튼의 너비를 설정합니다.

android:layout_height="wrap_content" : 버튼의 높이를 설정합니다.

android:id="@+id/setting_btn" : 버튼의 id를 설정합니다. (java 단에서 사용하기 위함)

android:text="설정 버튼" : 버튼의 텍스트를 설정합니다.



다음으로 MainActivity.java로 넘어갑니다.

먼저 버튼 객체를 하나 생성해 줍시다.


private Button buttonSetting;


그리고 버튼객체를 xml의 버튼과 연결해줘야겠죠?


buttonSetting = (Button)findViewById(R.id.setting_btn);


위와 같이 xml에서 버튼에 설정한 id를 통해 java의 버튼객체와 연결해줍니다.


그리고 버튼을 클릭했을 때 이벤트를 발생시켜주어야 합니다.

이를 버튼 클릭 이벤트라고 하며, onClickListener를 사용하여 아래와 같이 구현할 수 있습니다.


buttonSetting.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        Intent intent = new Intent(Settings.ACTION_SETTINGS);

        startActivityForResult(intent, 0);

    }

});


Intent를 사용하여 새로운 창을 생성하여 설정 화면을 띄워주는 코드입니다.

코드가 실행되고 난 후 ActivityForResult를 통해 onActivityResult가 호출되게 됩니다.

위의 Settings.ACTION_SETTINGS에서 Intent의 매개변수를 변경하여 원하는 설정 화면을 띄울 수 있습니다.

Settings의 메소드는 아래와 같습니다.



ACTION_SETTINGS : 기본 설정 화면

ACTION_ACCESSIBILITY_SETTINGS : 접근성 설정 화면

ACTION_AIRPLANE_MODE_SETTINGS : 비행기 모드 설정 화면

ACTION_APPLICATION_SETTINGS : 앱 관련 설정 화면

ACTION_BLUETOOTH_SETTINGS : 블루투스 설정 화면

ACTION_DATE_SETTINGS : 날짜 및 시간 설정 화면

ACTION_DISPLAY_SETTINGS : 디스플레이 설정 화면

ACTION_FINGERPRINT_ENROLL : 지문 등록 설정 화면

ACTION_INTERNAL_STORAGE_SETTINGS : 내부 저장소 설정 화면

ACTION_SOUND_SETTINGS : 사운드 및 볼륨 설정 화면

ACTION_WIFI_SETTINGS : 와이파이 설정 화면


그 외 설정에 대해선 여기를 확인하세요.


설정이 모두 끝난 후 다시 앱으로 돌아오면 Intent에서 onActivityResult를 호출하게 됩니다.

onActivityResult는 오버라이딩 메소드로 alt+insert키를 눌러 Override Method를 선택한 후 

onActivityResult를 생성한 후 다음과 같이 코드를 작성합니다.


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    switch(requestCode) {

        case 0 :

            // 할일 작성

            break;

    }

    super.onActivityResult(requestCode, resultCode, data);

}


위에 Intent를 최초 호출할 때 startActivityForResult에서 두번째 매개변수로 0을 보내주었었죠?

그 요청 코드가 바로 여기서 사용되는 코드입니다.

설정 화면에서 다시 앱으로 넘어오면서 onActivityResult 가 호출되며, swtich문에서 case 0부분에 걸리게 됩니다.

저는 설정 화면에서 어떤 설정을 하고 돌아왔을 때 리스트를 갱신해야 하므로 위와 같은 코드를 사용했으며,

필요시에만 작성하셔도 됩니다.



이상 '안드로이드 설정 화면 호출'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아뵙겠습니다.



C++ 벡터 사용법



안녕하세요 열코입니다.


C++에서 벡터는 표준 템플릿 라이브러리(STL)에서 제공하는 동적 배열구조 클래스입니다.


C의 배열처럼 빠른 랜덤 접근이 가능하며 자동으로 배열의 크기 조절과 추가 삭제가 가능합니다.


모든 자료형에 대해 배열처럼 저장할 수 있지만 한번에 한 타입만 저장이 가능합니다.


자바의 벡터와 마찬가지로 배열 크기를 추가할때 기존 배열 크기의 100%가 늘어납니다.(2배)



먼저 벡터를 선언하는 방법에 대해 알아보겠습니다.



vector<int> integer_vector;

vector<double> double_vector;

vector<char> char_vector;


벡터 클래스는 C++ 모든 자료형의 저장을 지원하며 위 코드와 같이 만들수 있습니다.


벡터에서의 데이터 추가 및 삭제는 배열의 끝에서 O(1), 배열의 중간 O(n)만큼의 시간복잡도가 소요됩니다.



벡터에 데이터 추가하기



for (int i = 0; i < 5; i++) {

integer_vector.push_back(i);

double_vector.push_back((double)i);

char_vector.push_back('a' + i);

}


벡터 클래스에서 push_back() 함수를 이용하여 요소의 끝에 데이터를 추가할 수 있습니다.


지정된 위치에 요소를 추가하려면 insert() 함수를 사용하세요.



벡터의 데이터 삭제하기



integer_vector.pop_back(); // 요소 끝의 데이터 삭제

double_vector.erase(double_vector.begin()); // 지정된 위치의 데이터 삭제

char_vector.clear(); // 모든 데이터 삭제



벡터는 다음과 같은 내부 함수가 존재합니다.



begin() - 벡터의 첫번째 요소를 가리킵니다.


end() - 벡터의 마지막 요소를 가리킵니다.


size() - 벡터의 요소 수(크기)를 반환합니다.


resize() - 벡터의 크기를 재조정합니다.


empty() - 벡터가 비어있는지 여부(true or false)를 반환합니다.


at() (또는 [ ]) - 벡터의 인덱스에 접근할 수 있습니다.


front() - 벡터의 첫번째 요소를 반환합니다.


back() - 벡터의 마지막 요소를 반환합니다.


data() - 포인터가 접근할 수 있도록 벡터의 주소값을 반환합니다( int *p = vector1.data() )



더 상세한 내용을 확인하고 싶다면 여기를 방문하세요.






이상 'C++ 벡터'에 대해 알아보았습니다.


질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!


공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.


'C, C++' 카테고리의 다른 글

C++ 클래스와 객체  (0) 2018.10.09
C/C++ 구조체 사용법 및 예제  (1) 2018.10.08
C/C++ 배열 사용법  (0) 2018.10.05
C 파일처리  (0) 2018.10.02
C언어 포인터  (8) 2018.09.25
C++ 자바 상속 비교  (0) 2018.09.08
C 랜덤 - 난수 생성하기  (7) 2018.09.06
C++ String 문자열 사용법 정리  (0) 2018.08.20

to Top