본문 바로가기

분류

매번 헤깔리는 오버로딩, 오버라이딩 오버로딩과 오버라이딩은 기본적으로 객체 지향 개념 중 하나이다. 객체를 기반으로 개발을 한다고 할 때는 그 객체가 가지는 속성을 잘 활용을 해야 한다. 객체를 가지고 여러가지 관점으로 이용할 수 있어야 한다. 객체를 지정하고 한번만 사용하고 약간 내용이 바뀐 것을 다시 객체를 만들어서 해야 한다면 비효율적이다. 오버로딩과 오버라이딩은 재사용관점으로 이해해도 된다. 오버로딩은 함수를 호출 할 때 동일한 이름의 함수로 정의 하되 인자의 값을 형태나 개수를 달리하는 것이다. 그리고 호출 할 때 인자의 값이나 개수를 넣으면 알아서 해당 함수로 불리는 것이다. 편리성도 있고, 재사용성도 있다. 오버라이딩은 상속 개념을 이해해야 한다. 상속도 객체 지향의 중요한 개념 중 하나이다. 상속을 하여 재사용을 한다. 예를.. 더보기
애자일 방법론, 방법론 테일러링 애자일 방법론도 어쩌면 개발방법론에 집중하기 보다는 개발에 집중하다 보니 나오게 된 방법론의 혁식적인 변화일 것이다. 애자일이라는 것은 민첩함 정도, 그렇다고 애자일 방법론을 민첩하게 개발하는 것 정도로 생각하고 해석하기에는 애자일이 가지는 의미는 매우 넓다. 대부분의 방법론은 제조에서 나온 것으로 보인다. 물론 PMP와 같은 프로젝트 관리 자격증은 건축에서 나왔다고 한다. 제조나 건축 무엇을 만드는 것에 대해서는 소프트웨어나 하드웨어도 관리가 필요하고 방법론이 필요하다는 측면으로 일맥상통한 면이 있을 것이다. Why? 애자일일까? 두가지 시대적 상황의 만남으로 보인다. 말그래로 민첩한 대응이 필요했다. 소프트웨어가 가지는 가장 큰 장점일 수도 있다. 바로바로 반영이 가능하다는 점. 자동차 생산관련해서 .. 더보기
CBD방법론의 컴포넌트란? Component Based Development 방법론이다. 개발 방법론은 여러가지가 있다. 컴포넌트 기반으로 개발을 한다는 것이다. 컴포넌트는 무엇일까? 프로그램의 기본 단위는 함수라고 할 수 있다. 함수도 어떤 기능을 한다. 모듈이 있다. 모듈도 기능을 하는 것인데, 함수들의 집합이다. 함수들이 어떤 순서로 동작이 되면서 기능을 하는 것이다. 모듈은 꽤 큰 기능을 표현할 때 사용한다. 결제 모듈, 화면 모듈 서버 모듈, 이런식의 표현을 사용쓴다. 그리고 모듈들을 여러개 모이되 주제를 기반으로 모인 것을 컴포넌트라고 한다. 컴포넌트는 꽤 큰 주제인데, 이 아래 여러개의 모듈이 있을 수 있다. 컴포넌트 베이스 개발 방법론의 취지는 주제별로 독립적으로 개발을 하고 서로 다른 컴포넌트 간의 상관 관계를 줄.. 더보기
플랫폼! 기차 기다리는 곳이 플랫폼 플랫폼 들어본 듯하지만, 막상 설명하긴 좀 어려운 말이다. 무엇을 플랫폼이라고 할까? 카카오톡이 플랫폼일까? 네이버가 플랫폼일까? 카카오톡이나 네이버는 서비스라고 한다. 서비스에 더 가깝다. 플랫폼은 뭘까? 기차들이 오가고 역에 멈춘다. 역에 보면 기차가 멈춰서 사람들이 탑승하는 곳이 있다. 여기가 플랫폼이다. 플랫폼은 기차가 머무르는 곳이고, 사람들이 탑승하는 곳이다. 플랫폼 자체가 서비스는 아니다. 서비스를 위한 기반은 될 수 있다. 카카오 자체가 여러가지 서비스를 품고 있다. 서비스라고 보는게 맞지만, 그 안에는 여러가지 플랫폼이 기반을 이루고 있다. 플랫폼 사업을 한다고 하는데, 이는 특정 서비스를 만든다기 보다는 서비스들을 만들기 위한 또는 서비스에 필요한 기능들을 제공하는 것이다. 서비스들이 .. 더보기
DevOps는 시너지이다. DevOps는 Development와 Operation의 합성어이다. 개발과 운영 함께 잘해보겠다는 것이다. 왜 이런 개념이 나왔을까? 원래 구축을 하고 운영으로 인수인계를 한다. 구축하는 사람들을 개발팀이라고 부르고, 그 구축된 시스템을 운영해주고 유지보수 해주는 팀을 운영팀이라고 부른다. 소프트웨어 개발은 사람이 하기에 사람에 대한 이해가 필요하다. 각각 소속된 사람은 어떤 심리를 가지고 있을까? 구축팀은 어떻게든 납기 내에 고객이 원하는 시스템을 구축을 해야 한다. 부실공사라고 하더라도 목에 칼이 들어와도 일정 준수가 목표이다. 조금 불편한 정도는 내가 알바가 아니다. 목숨걸로 일정을 준수하려고 한다. 운영팀의 느낌은 어떨까? 어떤 사람들이 무언가 시스템을 만들었는데, 개떡 같은 느낌이다. 운영을 .. 더보기
분리 발주 분할 발주 차이가 모꼬? 분리 분할 발주는 프로젝트는 원청, 시행코자 하는 회사는 분리와 분할 발주의 차이는 두가지 모두 '을' 또는 '병정' 입장을 좀더 생각하는 것이 소프트웨어 업계는 오랜동안 병정 놀이를 해왔다. 지금도 그러고 있다. 분리 발주는 소프트웨어 분리를 발주는 하는 것이다. 하드웨어 납품업체, 또는 솔루션 납품업체가 원청에 독자적으로 납품을 하는 것이다. 이를 전체 통으로 한 SI업체에 주고 그 SI업체가 하드웨어 납품업체, 솔루션 납품업체 이런식으로 끼고 들어오는 것이 아니라 발주 자체를 별도로 분리하는 것이다. 이러므로써 대형 SI업체의 횡포를 막고, 중간에 챙겨가는 마진도 줄이는 효과들이 있다. 물론 전체를 책임질 수 있는 범위가 아니게 되면서 이슈나 문제 발생 가능성이 있지만, 사실 각각의 하드웨어나 솔루.. 더보기
프로젝트 관리에는 정답이 없다. 프로젝트 관리에 답은 없다고 생각한다. 프로그램가 원하는 목표를 달성하면 된다. 그럼 어떻게 관리할 것인가? 원칙의 문제일 것이다. 사실 사람이 핵심인데, 이 이야기는 다음에 언급하고, 일단 프로젝트 관리의 원칙적인 얘기들을 하려고 한다. - 일정관리, 범위 관리, 원가 관리, 품질 관리, 인력 관리, 의사소통 관리, 위험 관리 이러한 것들을 관리해야 한다. 일정 관리는 기본이다. 언제까지 일을 마쳐서 납품을 해야 한다는 것이다. 일정은 어떻게 알 수 있을까? 해보지 않은 일을 얼마가 걸지 사실 예측이 어려운 것이다. 프로그램을 개발하는 일정에는 함정이 있다. 보통 개발 일정을 잡으라고 하면 코딩 시간으로 착각을 한다. 개발자들은 대개 그렇다. 매니저는 그렇게 생각하면 안된다. 그리고 스튜던트 효과가 있.. 더보기
페어 프로그래밍은 어메리칸 스타일 우리말로는 어색하지만, 짝 프로그램이라고 한다. 둘이서 같이 개발을 하는 것이다. 둘 중 한사람이 코드를 잡고, 한 사람은 옆에서 같이 코드를 보면서 개발을 한다. 형식이 있다기 보다는 두사람이 한다는 자체이다. 그럼 왜 두사람이 개발을 하는가? 한사람씩 나눠서 개발을 하면 더 생산성이 높을거 같은데 말이다. 일단 페어 프로그래밍은 생산성을 위한 것은 아니다. 프로그램의 코드 품질, 사전 오류 검출, 실수 방지등의 목적이다. 개발자가 혼자 하다보면 귀찮을때가 많다. Copy & Paste로 개발을 하게 된다. 일단 기능만 되면 되니 남들이 안볼 때 후딱 개발을 하고 놀고 싶다. 하지만 옆에서 누군가 본다면 양심적으로다가 그리고 자존심 상 심한 Copy & Paste를 할 수는 없고, 어떻게 하면 구조적일.. 더보기
리팩토링 is 리모델링 리팩토링은 다시 구조화 하는 것이다. 건물로 비유하면 리모델링 정도라고 보면 될거 같다. 보통 개발자들은 남들이 짜놓은 코드를 보면 코드가 엉망이라고 다시 짜야 한다고 한다. 대개는 다시 처음부터 짜고 그 복잡한 기능들을 구현하다보면 다시 스파게티 코드가 된다. (스파게티 코드라는 말을 쓴다. 엉망진창이라는 뜻이다.) 그러면 다른 누군가는 말을 한다. 다시 처음부터 짜야 한다고 역사는 반복된다고 했던가 그러면 건축물로 치면 처음부터 다시 짠다는 의미는 무너뜨린다는 것이다. 그리고 다시 짜는 것이다. 과연 효율적일까? 왜 그렇게 복잡한 코드가 되었을까 생각해보면 그럴만한 사연이 있기도 하다. 그러면 무엇이 좋을까? 개발을 처음할 때는 몰랐던 사실을 기능을 구현하고 나니 알았다면 알고 났을 때 어떤 구조가 .. 더보기
소프트웨어 테스트 위상이 높아진 까닭은 소프트웨어를 테스트하는 방법은 여러가지가 있을 수 있다. 기능를 하는 단위 테스트, 여러가지 조합해보는 통합 테스트, 성능 테스트, 보안 사항에 위배가 없는지 해킹 우려가 없는지도 테스트이다. 기본적인 기능에 문제가 없는 단위별 테스트가 단위테스트이다. 개발자가 기본적으로 자기만 개발한 프로그램에 대한 테스트를 해야 한다. 그래서 유닛테스트라고 하고 개발자들이 코드를 개발하는 곳에서 테스트를 할 수 있게 기본적으로 어떤 함수를 만들때 입력과 출력에 대해서 검증하는 것이다. 함수를 만들고 어떤 기능을 동작하게 했다면 입력에 따른 기대 출력값이 있을 것이다. 이것을 검증한 후에는 연결되었을 때 오류가 없는지 봐야 한다. 기능들이 조합되었을 때 예상치 못한 결과가 있을지 모르니 확인해봐야 한다. 통합 테스트를.. 더보기
객체지향을 쉽게 설명하면 객체지향이라는 말은 객체를 지향한다는 의미이다. 객체를 지향하는 것이 무슨 말일까? 그렇다면 이 전에는 무엇을 지향했을까? 프로그램은 순차적인 진행 절차를 가지고 개발이 되어왔다. 어떤 기능이 동작하기 위한 로직들이 수행되는 것이다. 이것만 놓고 보면 객체지향이라고 할 수는 없다. 순차적 프로그래밍이다. 순차적 프로그램 당시 무언가를 지향한다고는 하지 않았다. 객체지향이 나오면서 기존 순차적 또는 절차적인 순서가 아닌 방향이 된 것이다. '객체 지향이라는 개념이다. 객체 지향 개념은 객체를 지향했다는 것인데, C언어의 경우는 순차적인 프로그램을 만들었다. C++의 경우에는 객체가 중심이 된다. 객체라는 개념부터 이해를 해야 할텐데, 객체는 우리 주변에 모든 것이라고 할 정도로 모든 것이 객체로 되어 있다.. 더보기
소프트웨어 아키텍쳐는 정답이 없다? 아키텍쳐는 건물로 치면 구조물을 어떤식으로 만들 것인가 이다. 디자인은 건물의 외관이 어떤 외곽을 가지며 어떤식의 색깔과 분위기를 연출할지라면 소프트웨어에서도 비슷하다. 사용자가 접하고 있는 부분의 느낌이나 선, 색들을 정하고 꾸미는 것이다. 아키텍쳐는 순수한 그림 안에 어떤식으로 구조화 할지에 대한 부분이다. 건물 구조를 단순하게 사각형으로 할지, 층을 몇층으로 할지, 층간은 어떤식으로 구성할지, 두개의 건물을 나란히 건축한다고 할 때 중간쯤에 연결 통로를 만들지 이것이 효과적일지, 의미가 있을지 등을 고민한다. 아키텍쳐는 바뀔 수가 있다. 정답이 없을 수도 있다. 가장 좋은 안을 찾아가는 것이다. 디자인 안에서 기능들을 수행하는 것의 틀을 만드는 것이다. 아키텍쳐를 설계한다는 것은 가장 좋은 방법을 .. 더보기
소프트웨어 설계 vs 건축물 설계 설계라는 것은 그림을 그리는 것이다. 건축물로 치면 설계도를 그리는 것이다. 설계도는 건축물을 만들기 위한 모든 것이 담겨져 있다. 그림으로 표시도 되어 있고, 수치로도 표시가 되어 있다. 어떤 건축물을 만들지를 알 수가 있다. 건축물에도 조망도가 있고, 상세하게 층마다 어떻게 지어질지가 나타나있는 세부 설계도가 있다. 건물을 보면 우리는 계단을 올라가서 보이는 공간이 다이지만, 사실 건물을 건축할 때 고려되어야 할 것은 대단히 많다. 전기 설비가 어떻게 될지, 선은 어떻게 들어갈지, 수도는 어떻게 배관되어야 할지, 공기는 어떤식으로 흘러가는지, 각 구역들은 어떤 식으로 사용이 될지 세부적으로 1mm까지 표시가 되어 있는 설계도 필요하다. 소프트웨서 설계에도 대략적으로 컨셉을 보여줄 수 있는 기획 문서가.. 더보기
개발방법론 그리고 요구공학 개발 방법론은 여러가지가 있다. 개발을 어떻게 할 것인가의 문제인데, 과거 전통적인 방법론은 폭포수 방법론이였다. 폭포가 떨어지듯 순차적으로 개발을 진행하는 것이다. 기획 - 분석, 설계 - 개발 - 테스트 이 순서는 전통적인 개발의 순서이다. 어떤 것을 만들지 고민하고, 인터페이스라든가 기능을 설계하고, 해당하는 기능을 만들고 테스트하는 것이다. 이 방법이 많이 변하였고, 어떤 것이 맞다기 보다는 방법론의 변화에 대한 이해가 필요하다. 방법론은 정답이라는 개념이 아니라 좋은 것을 선택하는 문제이다. 건축이라면 아마도 설계도를 그리는 것이 공정상에 가장 중요할지 모른다. 설계가 잘못되었다면 아무리 건축물을 열심히 지어도 붕괴의 위험이나 잘못을 돌이킬 수 없기 때문이다. 시스템 개발에 대해서도 기획, 분석.. 더보기
앱 개발 어떻게 하지? 프로그램을 개발한다는 것은 어떤 기능들을 가진 것을 만드는 것이다. 프로그램 개발 자체는 절차를 만들고, 특정 기능이 불려지면 해당 기능에 맞게 로직을 만드는 것이다. 어떤 프로그램을 만드느냐에 따라서 약간씩은 방법이 달라질 수 있다. 예를 들면 앱을 개발한다고 하면 어떤 앱을 개발을 할지 생각하는 것이다. 그 앱은 어떤 화면을 가질 지 생각해본다. 그리고 그 화면을 대략 그려본다. 종이에 그리는 것도 좋다. 그리고 그 화면에는 어떤 기능이 있는지 생각해본다. 그 기능들을 만들기 위해서 어떤 로직이 필요한지 생각해본다. 개발을 한다는 것이 로직을 구현하는 것에 가장 밀접하지만 이런 일련의 과정 모두가 개발의 범주에 속한다. 그리고 기능을 개발하기 위해서는 어떻게 만들 수 있을까를 생각하는 것이다. 그리고.. 더보기
XML 그리고 JSON XML은 시스템의 데이터 표현에서 가장 많이 사용하는 방식이다. 웹브라우저의 탄생이후 표준적으로 사용한 언어은 HTML이다. 프로그램언어라기 보다는 Markup Language 표현하는 언어이다. HTML은 로직도 없고, 글자를 또는 표를 그리기 위한 다양한 태그만이 존재한다. HTML은 한정된 태그를 가지고 있다. 물론 HTML로 대부분의 화면을 만들어낼 수 있지만, 확장성이 용이하지 않다는 단점이 있다. 확장성이라는 것은 새로운 태그를 만들어내는 기능을 통해서 무한한 확장이 가능하도록 하였다. 이 언어가 XML이다. X가 eXtensible 이다. 동일하게 Markup Language이고 확장 가능한 형태로 만든 것이다. 필요에 의해서 새로운 태그를 추가할 수가 있다. 그 추가된 태그를 정의하는 파일.. 더보기
오픈소스는 소스 오픈? 왜? 오픈소스는 말그대로 소스를 오픈한 것이다. 오픈 소스의 말이 어렵다기 보다는 왜 오픈을 했을까에 관심을 둘 필요가 있다. 왜 오픈인가? 플랫폼을 오픈 것에 대해서는 이해하기 쉽다. 오픈을 함으로써 플랫폼을 많이 사용하고, 플랫폼 사용자가 많으면 그 플랫폼은 가치가 생긴다. 쉽게 말하면 중고나라라는 카페를 만든 사람은 제공자 입장이고, 수고스러움을 통해서 많은 사람들에게 중고거래의 터를 만들어줬지만, 결국 사람들이 많이 이용함으로써 수혜를 입게 된다. 광고를 싣을 수도 있고, 특정 상품들을 공동구매를 추진할 수도 있다. 플랫폼의 오픈은 자연스러운 과정이다. 그런데, 소스를 오픈한다는 것은 어떤 의미일까? 소스의 오픈도 자연스러운 참여를 기대한 부분이 있었다. 리눅스의 눈부신 발전 안드로이드의 발전등 모두 .. 더보기
웹서비스 vs 웹사이트 웹서비스를 웹사이트를 통한 서비스와 혼동을 할 수 있다. 웹사이트로 서비스를 해도 웹서비스라고 부를 수는 있을 것이다. 하지만 웹서비스라고 하면 특정 프로토콜을 가지고 서비스 하는 방식을 의미한다. 서버는 특정기능을 제공할 때 방식을 표준화하여 필요로 하는 기능을 제공받고, 제공해주는 개념이다. 지금의 오픈 API 정도의 이전 그리고 특화된 버전이라고 생각하면 이해가 쉽다. 오픈 API는 대외적으로 API를 오픈하여 사용할 수 있게 해주는 기능이다. 날씨 API라고 하면 해당 API를 호출하면 날씨 정보를 얻을 수 있다. 버스 관련 API라고 하면 버스의 위치 정보라든가 버스의 배차 정보를 알 수 있다. 위치도 알 수 있는 API도 제공한다. 이러한 정보를 기반으로 또 다른 서비스를 만들 수도 있다. 이.. 더보기
.NET 운영체제에 대해서 .NET은 마이크로소프트의 운영체제 계열이다. 계열이라고 표현한 이유는 그 이전 버전은 .NET이라는 이름이 아니라 NT라는 이름을 사용하였다. NT 이전에는 윈도우 OS를 사용하였다. 윈도우는 마이크로소프트의 빌게이츠에 의해서 만들어졌다. 빌게이츠는 DOS라는 운영체제 부터 만들었고, 이 운영체제의 목적은 개인용 컴퓨터의 운영체제였다. 이 말은 산업용, 기업용의 운영체제는 존재했다는 의미이고, 대중성을 위해서 만든 것이다. 꼭 대중성을 위했을까라는 생각은 들긴 하지만, 현재 사람들이 DOS라는 운영체제는 사용하지 않을 수 있지만, 윈도우라는 운영체제는 개인용 컴퓨터에서 가장 많이 사용하고 있다. 마이크로소프트는 개인용에 맞는 운영체제를 만들었다. 이로 인해서 운영체제중에서 가장 익숙하고 유명한 것이 윈.. 더보기
Java 기반 서버 - J2EE J2EE는 Java로 만들어지는 서버 기반 프로그램이다. 약어는 Java 2 Enterprise Edition인데, 이름이 갖지는 고유한 의미보다는 버전 정도를 나타낸다. 한때 전산시스템 도입시 고려되어졌고, 많이 적용되었던 형태이다. 전산을 보면 유행이 있는 것같다. 최근 유행이야 말할 것도 없이 빅데이터, 머신러닝, 인공지능일것이다. 빅데이터를 이미 업계에 한번 지나간 것이고, 이러한 키워드들도 유행을 가지고 있는거 같다. 분산환경으로 했다가 중앙 집중식으로 하고 클라이언트를 가볍게 하기도 하고, 클라이언트의 비중으로 높이기도 하고, 가볍게 하기도 하고, P2P라는 개념으로 클라이언트가 서버의 일부 기능을 포함하기도 하고, 서버 기반의 기업용 서버 개발에 많이 사용되어졌다. 개발이 용이하진 않고, 난.. 더보기
서버사이드 스크립트란? Server Side Script(JSP, ASP, PHP) 서버 편 스크립트이다. 서버 클라이언트 개념을 살짝 언급하면 서버는 어딘가 존재하는 클라이언트를 대응하는 프로그램이고, 클라이언트는 내가 보고 있는 프로그램이다. 내가 보고 있는 브라우저가 클라이언트이다. 내가 보고 있는 스마트폰앱이 클라이언트이다. 요즘은 컴퓨터에서만 또는 스마트폰에서만 동작되는 프로그램은 거의 없다고 생각된다. 시계앱이라든가 계산기 정도가 아닐지, 시계앱도 요즘은 다양한 앱들이 많아서 서버 연동될 가능성이 높아보인다. 서버와 클라이언트는 상호 통신을 한다. 브라우저를 켜고 특정 웹사이트에 접속을 하려고 하면 클라이언트에서 요청이 서버로 가고, 서버에서 해당 페이지를 응답해준다. 서버와 클라이언트가 통신을 한다. 이때 서버측에 있는 프로그램을 서버 사이드 프로그램이라고 한다. 서버 사이.. 더보기
jQuery는 무엇인가? 자바스크립트는 쉽다? jQuery는 이름만 봐서는 뭔가 쿼리를 할거 같아서 DB관련된 것이 아니냐 싶기도 한데, jQuery는 Javascript 라이브러리로 생각하면 된다. 물론 DB관련된 기능도 사용할 수 있기는 하다. 하지만 Query라는 선입견을 가질 필요는 없다. 자바스크립에서 유용하게 사용할만한 것들을 모아두고, 또 사용이 편리하게 한 개발 라이브러리이다. Javascript도 매우 접근이 쉬운 언어이지만, 처음부터 개발을 한다고 하면 준비해야 할 것들이 많을 것이다. 사용할 법 한 기능들을 미리 만들어둔다면 유용할 것이다. 자바스크립트에 대해서 자꾸 쉽다고 표현을 했지만, 이에 대한 오해는 없었으면 한다. 자바스크립트가 접근이 쉽다는 것이지 그 언어 자체가 너무 쉽다는 뜻은 아니다. 자바스크립트도 한편으로는 매우.. 더보기
스크립트로 서버 개발하는 node.js node.js는 javascript형태의 서버 사이드 언어이다. 서버를 개발할 수가 있다. 기존 대개는 javascript라고 하면 클라이언트 사이드 언어로 생각했다. 화면을 제어하는 정도 사실 javascript의 시초가 네츠케이프사 이젠 유물이 되어 버린 이 브라우저를 만들 당시에 간단한 화면 제어라든가 이미지 변경 정도 홈페이지에서 필요한 몇가지를 만들려고 제작을 했다고 한다. 그래서 자바스크립트는 매우 간단하였고, 사용이 쉬웠다. 그리고 클라이언트로 그 코드가 내려가고, 브라우저가 그 코드를 실행해서 수행되는 것을 사용자가 볼 수가 있었다. 클라이언트가 서버로부터 코드를 받아서 실행하는 것을 클라이언트에서 수행한다고 해서 클라이언트 사이드 언어이다. 대표적인 것이 javascript였다. 였다라고.. 더보기
파이썬이 나온지가 어언 20년? 파이썬이 나온지는 꽤 오래 되었다. 1991년에 귀도 반 로섬에 의해서 개발되어졌다고 한다. 그러면 20년도 넘게 흐른 것이다. 파이썬이 각광을 받은 것은 최근 10년일 것이다. 오래 되었지만, 어떤 언어들은 사라지거나 사용이 되지 않는 언어도 있는데 파이썬은 오히려 그 존재 가치가 더 인정받게 되었다. 파이썬이 개발이 굉장히 쉽다는 장점이 있다. 기존 C, Java등이 객체지향이고, 개발 로직이 복잡한 경우에 적합하고 개발이 어려웠다면 파이썬은 스크립트형 언어이다. 스크립트형 언어라고 하면 대표적으로 javascript가 있다. 스크립트형 언어와 대조되는 것이 컴파일형 언어이다. 컴파일형 언어는 미리 컴퓨터가 인지 할 수 있게 변환시키는 과정을 통해서 실행화일이라는 것이 만들어진다. 실행화일을 실행하면.. 더보기
Java언어의 장단점 프로그램 Java라는 것은 커피 이름에서 왔다고 한다. 어찌 이렇게 근사한 이름을 지었는지. C++이후에 개발이 되었고, C++개발 시 여러가지 어려운 점들을 쉽게 사용할 수 있게 바꾼 부분이 있다. 기본적으로 객체 지향이라는 관점은 동일하다. Java가 기존 언어와 극명한 차이가 있다면 메모리의 사용 방법에 있을 것이다. 기존 C나 C++은 메모리를 사용할 때 메모리 할당 개념이 있어야 했다. 개발자가 메모리가 필요한 만큼을 미리 생각하여 할당을 받아서 사용한다. 메모리를 필요한만큼 할당 받아서 사용한다라는 것이 생각보다는 어려운 과점이다. 덧셈, 뺄셈 수준의 계산 정도야 메모리가 얼마나 필요할지 예측이 되지만, 어려운 내용이 들어가면 점점 복잡해지고, 나중에는 메모리에 대한 예측이 틀릴 수가 있기 때.. 더보기
C++은 C언어와 무슨 차이예요? C++은 C에 ++이 더해졌으니 뭔가 더 좋아졌다고 볼 수 있는데, 이 좋아졌다는 점이 객체 지향이라는 개념이다. 객체 지향 개념은 객체를 지향했다는 것인데, C언어의 경우는 순차적인 프로그램을 만들었다. C++의 경우에는 객체가 중심이 된다. 객체라는 개념부터 이해를 해야 할텐데, 객체는 우리 주변에 모든 것이라고 할 정도로 모든 것이 객체로 되어 있다. 사람도 객체이다. 강아지도 객체이다. 컴퓨터도 객체라고 할 수 있다. 그것이 살아 있든 죽어 있든 모든 것은 객체이다. 그럼 순차적인 것과 객체 지향의 차이는 이렇다. 예를 들어 순차적인 것은 강아지에게 밥을 준다. 강아지를 목욕 시킨다. 강아지와 산책을 한다. 이런식으로 일어나는 일들에 대해서 순차적으로 진행을 했다고 하면 객체 지향은 강아지가 중심.. 더보기
C언어는 어떻게 만들어졌을까? C언어의 중요한 개념은? C언어는 개발자들이 접할 수 있는 처음 언어이거나 프로그램 개발의 기초가 되는 언어이다. B언어 다음으로 개발되어졌다고 하는데, B언어는 Bell 연구소에서 개발되었다고 한다. 켄 톰슨은 BCPL언어를 필요에 맞추어 개조해서 "B"언어(언어를 개발한 벨 연구소의 B를 따서)라 명명했고, 데니스 리치가 이것을 개선하여 C 언어가 탄생했다. 모든 명령에 대해서 코드로 되어 있다. C언어는 이 코드를 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어이다. 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 개발했다. 유닉스 시스템의 바탕 프로그램은 모두 C로 작성되었고, 수많은 운영 체제의 커널 또한 C로 만들어졌다. C언어가 유명한 이유는 아마도 개발자들에게 친화적이였기때문이다. 이렇게 말하면 C언어.. 더보기
정렬 알고리즘을 쉽게 개념만 가장 많이 쓰여지고, 기본적인 알고리즘이 정렬이다. 정렬은 순서대로 나열하는 것이다. 순서대로 나열하는 것은 많은 곳에서 의미있게 사용되어질 수 있다. 정렬을 엑셀로 데이터를 만들다가도 쇼핑몰에서 판매량순으로도 본다고 했을 때 이것들이 정렬에 해당된다. 프로그램 내부적으로도 어떤 자료들을 정렬하여 검색을 하기도 하고, 저장을 하기도 한다. 순차적으로 만드는 것은 알고리즘 상에서 필요로 하는 과정이기도 한다. 그래서 순서를 정하는 것에도 알고리즘이 필요하다. 정렬 알고리즘이라고 하는데, 이 정렬 알고리즘에는 몇가지 방법이 있다. 버블 정렬 - 물방울이 물밑에서 보글보글 올라온다고 해서 버블 정렬이라고 한다. 퀵 정렬 - 빨리 정렬을 할 수 있다고 해서 퀵정렬이라고 한다. 이 방법은 정렬을 하고자 하는 수들.. 더보기
알고리즘을 뭐라 말할까? 자료구조가 데이터를 다루는 구조였다고 하면 알고리즘은 어떤 기능을 동작시키기 위한 과정이다. 프로그램은 기본적으로 다루고자 하는 데이터와 알고리즘으로 이뤄진다. 기본적으로 무엇을 넣으면 어떤 결과가 나온다는 것이 알고리즘이다. 수학의 모든 공식이 알고리즘이고, 내가 미리 정해놓은 약속들이 알고리즘이다. 알고리즘은 문제를 풀어가는 방법이다. 어떤 식으로 풀면 된다라는 것도 알고리즘이다. 예를 들면 지금 있는 곳에서 서울 시청까지 가는 방법도 하나의 알고리즘이 될 수 있다. 길찾기 알고리즘에 해당된다. 알고리즘은 정해진 한가지만 있는 것이 아니다. 버스를 탈 수도 있고, 택시를 탈 수도 있고, 지하철을 타고 갈 수도 있다. 문제를 풀어가는 방법이라는 것이다. 문제를 풀어감에 있어서 최단 시간이 걸렸다든지 최.. 더보기
자료구조 꼭 알아야 할까? 자료 구조라는 것을 꼭 알아야 할까? 컴퓨터를 조금 공부한 상황이라면 자료구조라는 말에 먼저 머리가 아플수도 있다. 개발을 할 때 꼭 알아야 할까? 소프트웨어 개발에 있어서 필수적인 요소이긴 하다. 프로그램은 기본적으로 어떤 데이터를 다룬다. 회원 관리 프로그램이라고 하면 회원 데이터를 다룬다. 회원의 정보를 기억하고, 보여주기도 하고, 탈퇴할 수도 있다. 회원 정보는 이름도 있고, 어떤 경우는 나이도 있다. 어떤 경우는 가입일이 있을 수 있다. 이러한 정보를 자료라고 하고, 이것을 어떻게 관리할 것이가 어떤식으로 저장할 것이가가 자료 구조이다. 여기까지는 데이터 베이스까지의 얘기는 아니다. 데이터 베이스틑 저장에 관한 부분이다. 물론 데이터 베이스에서도 어떻게 저장하는가의 문제가 있다. 정보를 어떤식으.. 더보기