프로그래밍 관련
C# 강좌 18편. 컬렉션(Collection)
C# 강좌 18편. 컬렉션(Collection)
2012.10.131. 컬렉션(Collection) 우리가 이번 강좌에서 배우게될 '컬렉션(Collection)'이 뭐하는 녀석인지 간단히 알아봅시다. 컬렉션은 데이터의 검색과 저장을 위해 특화된 것이라고 말할 수 있습니다. 자료구조(Data Structure) 라고도 말할 수 있습니다. 컬렉션에서는 배열 리스트(Array List), 해시 테이블(Hash table), 큐(Queue), 스택(Stack) 등을 지원합니다. 하나하나 다 설명하다보면 강좌가 끝도 없이 길어질 것 같아, 간략하게 설명하겠습니다. 2. 배열 리스트(ArrayList) 배열 리스트란 배열과 가장 비슷하면서도 크기가 유연(동적)합니다. 배열 리스트에는 Add, BinarySearch, Clear, Contain, Insert, Remove, Sor..
C# 강좌 17편. 예외 처리(Exception handling)
C# 강좌 17편. 예외 처리(Exception handling)
2012.10.131. 예외 처리(Exception handling) 지금까지 강좌를 진행하면서, 그 예제를 응용하여 프로그램을 만드시면서 예외가 발생하신 적이 있나요? 여기서 예외란, 프로그램을 실행하다 도중에 예기치 않은 일이 벌어져 프로그램이 종료되는 것을 말합니다. 예를 들면 어떠한 수를 0으로 나눈다던가, 음수의 제곱근을 구하는 경우라던가, 어떤 인수의 값이 텅텅 비어있던가 등 논리적으로 어긋난 상황에 마주치면 프로그램은 어김없이 예외를 내보내고 프로그램이 종료되어버릴 것입니다. 이러한 예외 발생으로 프로그램이 종료되는 것을 막기위해 예외를 처리하는 것을 '예외 처리(Exception handling)이라고 합니다. 이제 앞으로 배울 try~catch문을 이용하여 예외를 우리가 받아 처리할 수 있습니다. 2. t..
C# 강좌 16편. 인터페이스(Interface)
C# 강좌 16편. 인터페이스(Interface)
2012.10.121. 인터페이스(Interface) 이번 강좌에서는 '인터페이스(Interface)'에 대해 알아보려고 합니다. 인터페이스라고 하니, 어디서 많이 들어보신것 같죠? 사전적 의미로는 '사용자인 인간과 컴퓨터를 연결하여 주는 장치. 키보드나 디스플레이 따위를 이른다.', '서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어 주는 부분. 또는 그런 접속 장치.'라는 의미를 담고 있습니다. 예를 들어, 키보드나 모니터 등을 사용하기 위해서 USB 포트에 연결시키면 컴퓨터가 이를 자동으로 인식하여 바로 사용이 가능하게끔 만들어줍니다. 그 외에도 프린터, 모뎀, 스캐너 등과 같은 주변기기를 손쉽게 연결하여 컴퓨터 내에서 바로 사용할 수 있습니다. USB 역시도 하나의 인터페이스이며, 두 장치를 이어주어 컴퓨..
C# 강좌 15편. 구조체(Structures) [작성 중 2018/02/18]
C# 강좌 15편. 구조체(Structures) [작성 중 2018/02/18]
2012.09.301. 구조체(Structures) C/C++에서 등장했던 구조체가 C#에서 다시 한번 등장합니다. 구조체는, 클래스와 상당히 비슷한 구조를 지니고 있습니다. 구조체는 주로 몇 가지의 항목으로 구성된 간단한 개체를 구조화하기 위해 사용됩니다. 예를 들어서, 우리가 2차원의 좌표를 나타내기 위해 Point 구조체를 만들고자 한다면 아래와 같이 나타낼 수 있습니다. struct Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } 위 예제를 보면 클래스와 똑같은 구조를 지니고 있습니다. 클래스와 다를게 없는 것 같은데, 어떤 부분에서 차이가 나는 것일까요? 이를 아래의 도표에서 정리해 보았습니다. (자세한 설명은 이곳..
28편. 스레드(Thread) (1)
28편. 스레드(Thread) (1)
2012.08.25들어가기 앞서 스레드(thread)의 사전적 정의를 살펴보면 '실, 가닥'이라는 것을 알 수 있는데, 컴퓨터 세계에서 스레드를 떠올리면 아래와 같은 이미지일 것입니다. 여기서 프로세스는 간단히 말하면 실행 중인 프로그램을 말합니다. 프로세스는 위와 같이 여러 개의 실행 흐름, 즉 여러 개의 스레드를 가질 수 있습니다. 지금까지 우리가 본 프로그램은 어떤 작업을 수행하면 그 작업이 끝날 때까지 기다려야 다른 작업을 수행할 수 있었습니다. 이는 우리가 여태껏 하나의 스레드만 사용했기 때문입니다. 하지만 어떤 작업을 하면서 다른 작업을 동시에 수행하고 싶을 때는 어떻게 해야 할까요? 그러면 여러 개의 스레드, 즉 멀티스레드(multi-thread)를 사용하면 되지 않을까요? 수많은 프로그래밍 언어에서 멀티스레..
24편. 예외 처리(Exception Handling)
24편. 예외 처리(Exception Handling)
2012.08.25예외(Exception) 예외 처리에서 '예외'는 프로그램 실행 중 예상치 못한 일이 발생하여 프로그램이 비정상적으로 종료되거나 잘못 작동하는 상황을 말합니다. 그렇다면 예외 처리는 무엇일까요? 예외 처리는 예외가 발생하는지 검사하고 만약 예외가 발생하면 비정상적으로 종료되는 것을 막기 위해서 이를 처리하는 것을 말합니다. 예외 사례 살펴보기 예를 들자면, 우리가 사칙연산이 가능한 계산기를 만들고 이를 배포했다고 가정해봅시다. 사용자들은 이 프로그램을 다운로드받고 사용하던 도중 본의 아니게 제수에 0을 넣고 나눗셈 버튼을 누르게 되었습니다. 하지만 수를 0으로 나눌 수는 없으므로 에러가 발생하고 프로그램이 비정상적으로 종료됩니다. 아래의 예제에서는 사용자에게 피제수와 제수를 입력받아 피제수와 제수와의 나..
23편. 콘솔 입출력(Console input and output)
23편. 콘솔 입출력(Console input and output)
2012.08.24콘솔 출력 자바에서는 지정한 형식에 맞춰서 문자열을 출력하는 System.out.printf() 메서드를 지원합니다. 이 메서드는 내부적으로 System.out.format() 메서드를 호출하며, 아래와 같이 사용할 수 있습니다. System.out.printf(문자열); System.out.printf(형식, 인수1, 인수2, ...); 인수(argument) vs 매개변수(parameter) 인수는 메서드를 호출할 때 전달되는 값, 변수, 참조를 말하며 매개변수는 함수 선언에서 정의할 수 있는 변수를 말합니다. // 여기서 a와 b를 매개변수(parameter)라고 합니다. static void func(int a, int b) { // ... } int num = 10; // 여기서 num과 5를 ..
22편. 인터페이스(Interface)
22편. 인터페이스(Interface)
2012.08.23인터페이스(Interface) 인터페이스는 우리가 전 편에서 본 추상 클래스와 매우 흡사합니다. 인터페이스는 추상 클래스처럼 추상 메서드를 멤버로 가지며 인터페이스도 마찬가지로 인스턴스화 할 수 없습니다. 하지만 아래와 같은 차이점이 있습니다. 인터페이스 내에 선언된 메서드는 public abstract로 선언됩니다. 인터페이스 내에 선언된 변수는 public static final로 선언됩니다. 이와 다르게 추상 클래스는 정적이 아닌 필드, final이 아닌 필드를 선언할 수 있습니다. 인터페이스에는 생성자가 없습니다. 추상 클래스는 extends 키워드를 통해 다른 클래스를 상속받거나 인터페이스를 구현할 수 있지만, 인터페이스는 extends 키워드로 오로지 인터페이스만을 상속받을 수 있습니다. 인터..
21편. 추상 클래스(Abstract Class)
21편. 추상 클래스(Abstract Class)
2012.08.21추상 클래스(abstract class) 추상 클래스는 abstract 키워드로 선언된 불완전한 클래스를 말합니다. 추상 클래스는 인스턴스화 할 수는 없으나, 추상 클래스를 상속받는 자식 클래스의 인스턴스화는 가능합니다. 추상 클래스를 선언하는 방법은 다음과 같습니다. abstract class 클래스명 { // ... } 추상 클래스는 클래스처럼 생성자를 가질 수 있으며 인스턴스 메서드나 정적 메서드를 멤버로 가질 수도 있습니다. 이어서 추상 클래스의 특징과 추상 메서드를 함께 살펴보도록 하겠습니다. 추상 메서드(abstract method) 추상 메서드도 마찬가지로 abstract 키워드로 선언된 메서드를 말합니다. 추상 메서드는 아래와 같이 메서드 본문이 없습니다. abstract class 클래스..
20편. 패키지(Package)
20편. 패키지(Package)
2012.08.21패키지(Package) 패키지는 관련된 클래스, 인터페이스, 하위 패키지들을 묶어놓은 상자와 같습니다. 각 패키지는 고유한 이름을 가지고 있으며, 관련 있는 항목들을 그룹화하여 관리하기 용이하도록 만들어줍니다. 파일 시스템에서 살펴보면 패키지가 디렉터리라는 사실을 알 수 있는데, 같은 패키지에 속해있는 클래스의 소스 파일은 같은 디렉터리에 있는 것을 볼 수 있습니다. 상단에 보이는 src 디렉터리는 자바 IDE(이클립스, 인텔리제이 등)가 소스 파일을 저장하는 곳이며 이 디렉터리 자체는 패키지가 아닙니다. src 디렉터리 아래에 있는 모든 하위 디렉터리는 자바 패키지와 동일합니다. 디렉터리 안에 또 다른 디렉터리가 있을 수 있는 것처럼, 패키지 아래에도 또 다른 하위 패키지가 있을 수 있습니다. 예를 들..
19편. 제어자(Modifiers)
19편. 제어자(Modifiers)
2012.08.19자바의 제어자는 접근 제어자, 비접근 제어자로 나눌 수 있습니다. 우선 접근 제어자부터 살펴보도록 하겠습니다. 접근 제어자(Access modifier) 접근 제어자는 그대로 클래스 내에서 멤버로의 접근을 제어하는 역할을 합니다. 접근 제어자에는 public, protected, default, private가 있습니다. 우선 public, protected, default, private가 각각 무엇인지 간단히 살펴보고 예제를 보도록 하겠습니다. public: 모든 위치에서의 접근을 허용합니다. 접근 제어자 중에서 범위가 가장 넓습니다. protected: 동일 패키지 혹은 다른 패키지에 있는 자식 클래스에서만 접근할 수 있습니다. default: 접근 제어자를 붙이지 않으면 자동으로 붙는 접근 제어자..
18편. 상속(Inheritance)
18편. 상속(Inheritance)
2012.08.16상속 여기서, 상속(Inheritance)이란 말 그대로 '부모의 유산을 물려받다'를 의미하고 이는 '자식이 부모의 것을 가진다'라고 할 수 있습니다. 객체 지향 프로그래밍에서도 이와 비슷한 개념으로 사용되는데, 여기에서는 부모 클래스에 정의된 멤버(필드, 메서드 등)를 자식 클래스가 물려받는 것을 말합니다. 즉, 상속을 통해 기존에 있던 클래스(부모 클래스)를 이용하여 새로운 클래스를 만들 수 있습니다. 이는, 기존에 만든 것을 이용해서 만들어내기 때문에 적은 양의 코드로 새로운 클래스를 만들어 낼 수 있습니다. 상속을 해주는 클래스는 부모 클래스(parent class)라고 하며 슈퍼 클래스(superclass), 기반 클래스(base class)라 부르기도 합니다. 상속을 받는 클래스를 자식 클래스..