안녕하세요 기형쌤입니다.

겨울이 왔지만 아직은 그래도 따듯한 날씨를 유지하는듯 합니다.

그래도 감기 걸리실 수 있으니 몸 따뜻하게 입고 다니셔야 해요!

또 마스크도 항상! 끼고 다니셔야하는거 알죠? 다들 조심하자구요.

 

오늘 제가 들고 온 이야기는 비주얼 베이직 이라는 언어 이야기입니다.

 

비주얼 베이직(Visual Basic .NET)은 무엇인가?

비주얼 베이직은 마이크로소프트사에서 만든 .NET Framework 기반의 프로그래밍 언어입니다.

Visual Basic .NET 이전에 VIsual Basic 6.0 이라는 프로그램이 있었지만

6.0에서 파생되었다기에는 차이점이 조금 많아 6.0 버전을 사용하던 사람들이 많이 넘어오지 않아

초기에는 사용자의 수가 많이 적었습니다.

 

VB .NET은 객체 지향 언어라서 절차 지향인

VB 6.0 소스 코드가 VB.NET과 호환되지 않아 아예 처음부터 코딩해야 하는 번거로움이 있었습니다.

마이크로소프트도 이 문제를 몰랐던 건 아니었기에 모체 프로그램인 Visual Studio 2008까지는

VB 6.0 변환기를 포함했었으나 완전히 1:1로 변환할 수 있는 것도 아니었고

Visual Studio 2010부터는 변환기가 삭제되었습니다.

 

그러나 VB 6.0 지원이 중단이 되었고 최신 운영체제로 가면서

동작하지 않는 기능이 많아졌습니다. 그리고 강력해진 새로운 확장 라이브러리 및 기본 컨트롤도 개선되는 등

상당한 발전을 보여 많은 사용자들이 VB.NET으로 넘어오는 계기가 되었습니다.

 

.NET Framework 기반이지만 C#이라는

그야말로 .NET Framework를 위하여 새롭게 만들어진 언어가 존재하기 때문에

C#에 비해 인지도는 떨어지는편입니다.

그리고 VB.NET과 C#은 같은 .NET Framework 라이브러리를 사용하기 때문에

사실상 문법과 일부 런타임 라이브러리를 제외하면 기능적으로는 큰 차이가 없기도 합니다.

 

Visual Basic .NET의 특징?

VB.NET에서는 My namespace라는 기능을 제공하고 있습니다.

7가지의 기능들이 있는데

 

My.Computer : 당신의 컴퓨터에 대한 이름, 메모리, 시간, 네트워크 등의 정보를 제공

My.Application : 현재 응용프로그램의 실행경로, 이름이나 버전, 그리고 환경 변수들을 제공

My.User : 윈도우에 해당되어 있는 이름 같은 것을 가져옴. 또, 사용자가 특정 역할에 속하는지도 확인 가능

My.Forms : 프로젝트에 있는 모든 폼의 참조를 제공

My.WebServices : 웹 서비스에서 사용되는 프록시 서버에 대한 접근 권한을 얻는게 가능

My.Settings : 읽거나 저장하는 응용 프로그램 구성 설정이 가능

My.Resources : 현재 응용프로그램에서 사용중인 리소스 정보를 읽을 수 있음

 

이러한 기능들을 사용하실 수 있습니다.

또한 이전의 문법들에서 좀 더 가독성이 좋은 언어체계를 가지고 있기도 합니다.

ex) IsNot 연산자, WithEvent 선언자 등

 

또한 C#과 비슷하게 WPF의 프로젝트를 만들어서 활용이 가능합니다.

 

Visual Basic .NET과 C#

C# 언어는 .NET을 위해 만들어진 언어라고 봐도 무방하다는 평을 들을정도로

.NET과의 호환이 좋습니다. 물론 Visual Basic .NET 또한 .NET 프레임워크 기반이기에

.NET과의 호환성은 걱정하실 필요가 없습니다.

 

C#과 VB.NET은 같은 라이브러리를 사용합니다.

이는 C#과 VB.NET의 코드를 완벽하게 변환 가능하다는 것을 내포하는데

이를 이용하여 다양한 프로그래밍 방식을 진행해볼 수 있습니다.

 

그래서 .NET Core 환경에서의 개발은 프로페셔널하고 편리한 C#, 배우기 쉽고 간단하지만 강력한 Visual Basic.NET,

아직은 언급하지 않았었지만 연산에 특화된 F#, 이 세가지 언어로, 리눅스, 맥OS 개발을 할 수 있다는 말입니다.

그리고 웹 애플리케이션 개발용으로 ASP.NET Core를 사용 할 수 있습니다.

또한 .NET Standard를 통해 .NET Framework, Xamarin, Mono에도 호환이 됩니다.

 

단지 윈도우 운영체제 기반인 프로그램 언어인지라 윈도우 환경을 벗어나면 호환이 안된다는 단점 또한 있습니다.

윈도우 외의 운영체제에서도 실행할 수 있도록 하는 프로젝트이지만,

컴파일 시 결과물은 PE DLL 파일로 나오게 됩니다.

윈도우 비주얼 스튜디오에서 컴파일 시 EXE 파일도 나오지만,

실제 컴파일 결과물인 DLL 파일을 로드하여 실행하는 것에 불과하기 때문에

DLL 파일이 없으면 당연히 실행되지 않습니다.

다른 운영체제들은 터미널로 .NET Core 런타임을 설치한 후

dotnet (실행할 닷넷 DLL 파일)을 입력하고 실행하면 실행이 가능합니다.

 

배워봅시다!

프로그래밍 언어를 알아야 하는 것도 가짓수가 너무 많죠?

어디서 배워야 할까요?

 

현재 국비지원 받으시며 무료로 배우 실 수 있는 과정이 있습니다.

관심 있으시다면 아래의 네임카드를 클릭해주시면

바로 무료 상담 가능합니다!!

 

네임카드를 클릭해주세요!!

언제나 편하게 지내고싶은 마음이 굴뚝같지만..

매일매일을 그렇게 보낼 수 없는 것 처럼.

이번 주말이 제겐 그런 날이었습니다.

 

주말을 시작하는 금요일부터 시작된 이 통증은 일하는 내내 저를 괴롭혔고,

몸이 보내오는 위험신호를 쓰다듬으며 달래보았지만

하루 온종일 칭얼대는 아이마냥 통증은 몸에 대롱대롱 매달려 있었습니다.

 

그렇게 금요일을 통증과 함께 마무리 하고 주말을 여는 토요일.

나를 괴롭히던 이 아이는 지치지도 않는지 저를 약올려대었고,

이제는 열이 오르는 머리를 붙잡으며

 

'하지마라 아가...하지마라 아가...'

 

라는 말 만을 되뇌일 수 밖에 없었습니다.

 

해열제를 먹고, 항생제를 먹자 다행히도 그 아이는 부모님의 손을 꼭 잡고

집으로 가듯 떠나주었지만, 얼마나 체력도 좋고 지친지도 않는지

토요일 하루 반나절을 꼬박 그 아이에게 시달리고 있었더랬죠.

 

아픔이 가시고 선명한 하늘을 그제서야 바라볼 수 있었습니다.

생각해보니 이번주 내 하늘을 제대로 본 적이 없더랬지...하는 생각이 마음 한 켠 자리잡았습니다.

 

하루에 5번 정도 하늘을 바라보는 사람은 여유있는 인생을 살고있는것이라는 말이

마음으로 재생되자 괜시리 울컥해졌습니다.

 

삐져나오려는 눈물을 저 하늘에 날려버리고

이리 마음 울적해지는건 다 저 하늘이 높아서 그렇다는

말도 안되는 변명을 내뱉으며 하늘을 향해 씨익 웃어보였습니다.

 

마치 '너는 그래도 이해해줄거지?'하는 마음으로 말이죠.

 

해는 금방 넘어가고 뉘엿뉘엿한 불그스름함에 마음을 빼앗겼습니다.

이대로 자신의 마지막을 장식하는 빛의 그 찬란한 아름다움을 그대로 눈에 담아

불이 꺼진 그 하늘 위로도 잔상을 남기고픈 벅참이 가슴을 채웠습니다.

 

'아 이대로라도 괜찮겠구나'

 

그 하늘의 붉은빛은 제게 묘한 용기를 심어주기 위해 그렇게 자신을 불태웠나 하는 감정까지 몰려오자

괜시리 마음이 더더욱 벅차올라왔습니다.

 

그렇게 일요일을 맞았습니다. 저 하늘이 제게 자신감을 심어주었고,

아침하늘의 높음은 제게 기쁨을 선물해주었습니다.

여러분 하늘을 한 번 바라보세요.

저 하늘의 높음과 아름다움은 당신을 위한 것입니다.

오늘의 저와 같이 말이죠.

안녕하세요 기형쌤입니다.

눈이 오기 시작했습니다. 한 해의 끝이 보이기 시작하니

마음이 싱숭생숭하네요. 올 해는 벌써? 라는 말을 제일 많이 쓰는 것 같아요.

어쨌든 다가오는 신년을 위해서 우리 잘 준비해보자구요!

 

오늘 들고 온 이야기는 객체지향언어에 관한 이야기입니다.

 

제가 그동안 이런저런 포스팅을 하면서 많이 쓰던 말이 바로

객체지향언어 일건데요

객체지향언어에 관해서는 따로 언급하지 않아 답답하셨을 수도 있을듯 하여

이렇게 따로 다루기로 했습니다!

 

객체지향언어란 무엇일까요?

일단 당연하게도 프로그램의 설계 방법론이자 그 개념입니다.

프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라,

프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식으로 이뤄집니다.
여기서 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 보면 됩니다.

 

서술의 편의상 객체지향을 대표적인 언어인 Java 위주로 소개하고 있고

class나 public 같은 용어를 사용했었습니다.

다만 이 경우만 객체지향에 해당하는 것으로 오해하지 않게 주의해야 합니다.

모든 언어가 class나 접근 제한자(public이나 private)를 사용하는것은 아니기 때문입니다.

대표적인 예로 JavaScript는 프로토타입 객체지향을 사용하고 있고

Python의 경우에는 접근제한자가 없습니다.

객체지향은 특정 언어가 아니라 개념으로 생각해주셔야 합니다.

class는 객체이며 struct는 객체가 아닌 데이터의 집합이라는 설명 역시 맞는것이 아니며

특정 언어가 객체지향 언어라는 말도 완전히 틀린 표현입니다.

 

객체지향언어의 시작

객체지향언어 이전의 프로그래밍 방식은 절차적인 프로그래밍 방식이었습니다.

물론 모든 프로그램은 절차적으로 실행되긴 하지만 여기서 말하는 절차적 프로그래밍은 조금 다른 의미를 가집니다.

절차적 프로그래밍이란 루틴, 서브루틴, 메소드, 함수 등(이를 통틀어 프리시저라 함)을 이용한

프로그래밍 패러다임을 뜻합니다. 명령형 프로그래밍의 일종이라고 보시면 됩니다.

 

어쨌든, 이전에는 프로그래밍이란 학교대사전 고등학생 알고리즘처럼 입력을 받아 명시된 순서대로 처리한 다음

그 결과를 내는 것뿐이라는 생각이 지배적이었습니다.

즉, 프로그램을 명령어의 모음으로 인식한 것이지요.

또한 프로그래밍이란 어떻게 어떤 논리를 어떤 순서대로 써나가는 것인가에 집중되었습니다.

즉, 프로그램 자체가 가지는 기능에 대해서만 신경을 썼지,

이 프로그램이 대체 어떤 데이터를 취급하는 것인가에는 그다지 관심이 없었던 것이죠.

 

그러나, 이 방식은 간단한 알고리즘이면 모를까 조금만 복잡해지면

순서대로 나타내는 것이 불가능할 정도로 꼬인 "스파게티 코드"를 만들게 되기 십상입니다.

이렇게 꼬여버린 코드는 다른 사람이 보고 이해하는 것이 거의 불가능할 뿐더러

심지어는 작성한 본인조차도 유지보수에 어려움을 겪게 됩니다.

명령어의 양이 많아지는 것은 기본이고, 특정 코드 부분은 어디에 사용되는 코드고

해당 코드 부분은 어디까지 이어지는지의 흐름을 파악하기도 힘들어지며, 중복 코드 대처도 매우 골치가 아프죠.

 

이러한 문제를 해결하기 위해 에츠허르 다익스트라가 1968년 GOTO문의 해로움이라는 논문에서

프로그램을 함수(procedure) 단위로 나누고 프로시져끼리 호출을 하는 구조적 프로그래밍 방식을 제안하면서

이러한 위기를 벗어날 수 있었습니다.

프로그램이라는 큰 문제를 해결하기 위해

그것을 몇개의 작은 문제들로 나누어 해결하기 때문에

하향식(Top-down) 방식이라고도 부릅니다.

 

하지만 함수는 데이터의 처리 방법을 구조화했을뿐, 데이터 자체는 구조화하지 못했습니다.

이는 전역 네임스페이스 포화 문제 즉, 변수 이름을 다 써서 이름 짓기도 힘든 상황을 낳게 되었습니다.

게다가 실행 콘텍스트를 저장할 마땅한 방법이 없어지는 문제까지 생기게 되었죠.

 

 

또한 엉뚱한 데이터가 엉뚱한 함수에 전달돼서 데이터를 오염시키는 문제가 발생하고

그런 가능성 때문에 프로그래머가 한 함수의 작동에 영향을 받는 변수를 조사해야 할 때

모든 변수를 다 조사해야 하는 어려움에 봉착하게 되었습니다.

이 과정이 변수가 수백개 이하의 코드에서는 사람의 힘으로 가능했지만(물론 이 방법도 힘들지만)

코드의 덩치들이 커지면서 도저히 사람의 힘으로는 가능하지 못 할 지경이 되었습니다.

 

이를 극복하기 위한 대안으로 등장한 것이 바로 객체 지향 프로그래밍입니다.

큰 문제를 작게 쪼개는 것이 아니라, 먼저 작은 문제들을 해결할 수 있는 객체들을 만든 뒤,

이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bottom-up) 해결법을 도입한 것입니다.

이 객체란 것을 일단 한번 독립성/신뢰성이 높게 만들어 놓기만 하면

그 이후엔 그 객체를 수정 없이 재사용할 수 있으므로 개발 기간과 비용이 대폭 줄어들게 되었죠.

 

지원하는 언어?

객체지향언어가 지원하는 언어에는 Smalltalk 언어, Ruby와 Python, C언어에 객체 처리 기능추가 된버젼,

Java, C#, Objective-Pascal 등이 있습니다.

그 중 대표적인 Ruby는 Smalltalk의 계보를 잇는 순수 객체지향 언어입니다.

기존의 C++나 Java 등에 비해서 난이도가 더 쉽습니다.

 

Python 역시 순수 객체지향을 지원하고 있습니다.

Ruby와 비슷한 구조를 가지고 있으며, 미세한 명령어나 기법 차이 등이 있을 뿐,

거의 형제처럼 가까운 언어들입니다.

기초반이나 취미 코딩반 등에서는 이 두 언어를 거의 똑같은 언어라고 설명하면서

루비와 파이썬의 코딩을 동시에 가르치는 곳도 있습니다.

 

객체지향언어라고 대표적으로 소개하는 Java나 C#의 경우 순수한 객체지향이라기보다는

기존 프로그래밍 언어에 객체 지향 요소를 추가한다거나 확장한 형태로 만들어졌습니다.

 

어떻게 배울 수 있나요?

사실 객체지향언어는 프로그래밍을 배울 때 만나게 되는 난관이기도 합니다.

C를 배운 뒤 C++을 배우는 상황에서 특히 심하긴 한데,

곧바로 Java Python으로 배우기 시작하는 경우에도 마찬가지 입니다.

왜냐하면 이전까지 배웠던 것은 프로그래밍 언어의 문법이었다면(절차적 프로그래밍으로서의 문법),

OOP는 가장 문제가 덜 생기는 방향으로 코딩하게끔 하는 가이드라인이기 때문이죠.

이제 막 알파벳과 기초 영문법을 뗀 학생에게

수사법 내지는 논리적 작문을 가르치는 것과 동일한 느낌으로 생각하시면 이해가 편할듯 합니다.

 

이 문제라는 것도 수천, 수만 줄의 코드를 수년간 유지보수할 때에 몸에 와닿는 종류인데,

기껏해야 과제 제출하고 다시 손대지 않을,

길어야 수백 줄짜리 코드 정도만 짜봤을 학생들에게는

전혀 체감이 잘 되지 않는것이 당연합니다.

게다가 대부분의 언어들은 기존의 언어에 객체지향을 얹어놓은 형태이기 때문에

굳이 OOP에 맞춰서 짜지 않아도 원하는 결과가 일단 나오기 때문에 이러한 현상이 더 합니다.

 

그렇다면 이런 난관인 언어를 어떻게 배우면 될까요?

 

기초부터 차근차근 쌓아나가실 수 있는 전문가 과정으로 안내합니다.

국비지원으로 무료로 수업을 들으실 수 있고

나아가 취업까지 잘 하실 수 있도록 실력을 키워드립니다.

관심있으시다면 아래의 네임카드를 클릭하여

문의주세요!

 

네임카드를 클릭해주세요!!

+ Recent posts