배열과 포인터의 관계배열의 이름도 포인터이다. 단, 그 값을 바꿀 수 없는 '상수 형태의 포인터'이다. 즉 배열 변수는 어떠한 값으로도 바꿀 수 없다. 포인터 변수와의 차이도 이것뿐이다. 이 것은 그냥 배경지식으로 알고 가고 다음 예제를 통해 배열의 값과 주소를 보자 #include int main() { // 배열 int arr[3] = { 5, 10, 15 }; printf("arr = %d\n", arr); for (int i = 0; i
포인터 이해하기 C언어는 포인터를 이용해 메모리에 직접 접근이 가능하다 그래서 Love레벨 언어의 특성을 가진다고 말한다. 메모리에 직접 접근이 가능하게 하려면 주소값을 저장할 변수가 필요한데 이것이 포인터 변수이다. 다음 코드를 보며 이해 해보자 #include int main(void){ int num = 7; int * pnum; pnum = # return 0;}cs int * pnum 이 바로 주소값을 저장할 포인터 변수이다. pnum은 변수명이고 int는 int형 변수의 주소값을 저장한다는 것이다.pnum = &num에서 &num은 num의 주소값이고 이 값을 pnum에 대입한 것이다. &연산자는 피 연산자의 주소값을 반환하는 연산자이다. 저 위에코드를 한줄로 표현하면 "포인터 변수 p..
데이터베이스 시스템(Database System)데이터베이스 시스템은 각 조직에서 사용하던 데이터를 모아서 통합하고 서로 공유하여 생기는 장점을 이용하는 시스템이다. 데이터베이스 시스템은 데이터베이스 관리 시스템(Database Management System, DBMS), 데이터베이스, 그리고 데이터 모델의 세가지로 구성되어 있다. 데이터베이스는 하드디스크에 저장된 데이터이고, DBMS는 주기억장치에 저장된 소프트웨어이다. 데이터 모델은 눈에 보이지 않는 논리적인 개념으로 데이터가 저장되는 기법에 관한 내용이다. 이외에도 데이터베이스 시스템을 이해하기 위해서는 데이터베이스 언어, 데이터베이스 사용자에 대해 알아야 한다. 데이터베이스 시스템은 데이터의 검색과 변경 작업을 주로 수행한다. 여기서 변경이란 ..
데이터, 정보, 지식데이터가 모이면 정보가 되고 정보가 모이면 지식이 된다. 데이터는 관찰의 결과로 나타난 정량적 혹은 정성적인 실제 값을 말하고, 정보는 데이터에 의미를 부여한 것을 말하며, 지식은 사물이나 현상에 대한 이해를 말한다. 예를들어 에베레스트 산의 높이는 데이터에, 에베레스트 산의 지리적인 특성을 설명한 것은 정보에, 에베레스트 산에 올라가는 가장 좋은 방법을 소개하는 보고서는 지식에 해당한다. 데이터베이스데이터베이스는 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것이다. 데이터베이스는 일상생활의 거의 모든 곳에서 생성된다. 대학의 학생 관련 데이터는 학사 데이터베이스에, 은행의 신용카드 거래 내역은 은행 데이터베이스에 저장되며, 병원의 진료 기록..
재귀함수의 기본적인 이해재귀함수는 말 드대로 함수는 함수내에서 자기 자신을 다시 호출하는 함수를 의미한다. #include void Recursive(void) { printf("Recursive call! \n"); Recursive();} int main() { Recursive();}cs Recursive함수에서 Recursive()으로 자기 자신을 다시 호출한다. 실행결과는 "Recursive call" 이 계속 출력되는 무한 츠쿠요미에 걸리게 된다. 여기서 아 그렇구나 라고 이해하면 안된다. 원래는 Recursive 함수가 호출 될때 마다 계속해서 Recursive 함수의 복사본이 만들어져서 복사본이 실행되는 구조이다. 여기서 이해가 안될텐데 그림을 보자 그림은 복잡해 보이지만 실제로는 훨씬 이..
자료구조란?자료구조의 정의를 알기전에 프로그램의 정의는 "프로그램이란 데이터를 표현하고, 그렇게 표현된 데이터를 처리하는 것이다." 이다. 여기서 말하는 데이터의 표현은 데이터의 저장을 포함하는 개념이고 데이터의 저장을 담당하는 것이 바로 자료구조이다. 넓은 의미에서 int형 변수도, 구조체의 정의도 자료구조에 속한다. 둘다 데이터의 표현 및 저장하는 하나의 방법이기 때문이다. 실제로 배워야할 자료구조는 이렇게 단순하지 않다. 자료구조는 기본적으로 다음과 같이 분류할 수 있다. 파일도 데이터를 저장하는 도구이기 떄문에 파일의 구조도 자료구조에 포함된다. 선형구조는 자료를 표현 및 저장하는 방식이 선형(linear)이고, 선형은 단어의 뜻 그대로 선의 형태로 이해하면 된다. 즉 선형 자료구조는 데이터를 선..
백준은 무료로 코딩테스트를 공부할수 있는 대표 사이트이다. 백준 사이트에서 어떻게 코딩테스트를 하는지 알아보자 백준 사이트 : https://www.acmicpc.net/ 사이트접속 후 먼저회원가입을 한다. 가입하기를 누르고 이메일 인증을 하면 회원가입이 된다. 회원가입을 완료한 후 카테고리 메뉴에서 전체 문제를 눌러 보면 1000번 부터 문제 번호가 보이고 가장 쉬운 1000번을 테스트로 풀어보자 문제가 보이고 예제 입력과 예제 출력이 보인다. 1 2를 입력하면 3이 나오게 하면 된다는 것 같다. 소스코드에 코딩을 작성하고 소스코드를 다 적고 제출을 누르면 자동으로 채점이된다 제출 할때 몇가지 주의점은 먼저 언어설정을 해줘야 하고 자바인경우 무조건 main클래스에 작성해야 한다 아니면 컴파일 에러난다...
Dao의 분리 이유개발자가 객체를 설계할 떄 가장 염두에 둬야 할 사항은 바로 미래의 변화를 어떻게 대비할 것인가 이다. 왜냐하면 오브젝트에 대한 설계와 이를 구현한 코드가 변하기 때문이다. 만약 2명의 개발자에게 동일한 기능 변경을 요청했다고 하자. 그런데 한 명은 단 몇줄의 코드만 수정하고 다른 개발자는 5시간이 걸렸다. 어떻게 변경이 일어날 때 필요한 작업을 최소화할까? 그것은 분리와 확장을 고려한 설계가 있었기 때문이다. 변화가 한 번에 한 가지 관심에 집중돼서 일어난다면, 우리가 준비해야 할 일은 한가지 관심이 한 군데에 집중되게 하는 것이다. 즉 관심이 있는 것끼리는 모으고, 관심이 다른 것은 따로 떨어져 있게 하는 것이다.프로그래밍의 기초 개념중에 관심사의 분리(Separation of Co..
스프링이란스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다. 애플리케이션 프레임워크는 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술 API를 제공해준다. 스프링을 이해하기 위한 방법스프링은 자바를 기반으로 한 기술이다. 스프링이 자바에서 가장 중요하게 가치르르 두는 것은 바로 객체지향 프로그래밍이 가능한 언어라는 점이다. 스프링이 가장 관심을 많이 두는 대상은 오브젝트다. 스프링을 이해하려면 먼저 오브젝트에 깊은 관심을 가져야 한다. 오브젝트에 대한 관심은 오브젝트의 기술적인 특징과 사용 방법을 넘어서 오브젝트의 설계로 발전하게 된다. 객체지향 설계(object oriented design)의 기초와 원칙을 ..
스트림과 채널의 차이충분히 큰 버퍼의 사용은 네트워크 프로그램의 성능에 가장 큰 영향을 미치는 부분이다. 그래서 스트림을 항상 버퍼링할 것을 권장했다. 버퍼는 버퍼링 스트림에서와 같이 단순한 바이트 배열로도 표현될 수 있다. 프로그래밍 관점에서 스트림과 채널의 가장 큰 차이점은 채녈은 블록 기반인 데 반해 스트림은 바이트 기반이다. 스트림은 순서대로 한 바이트씩 제공하도록 설계하였다. 단지 성능을 위해 바이트 배열을 전달할 수는 있지만, 기본 개념은 한 번에 1바이트 데이터를 전달하는 것이다. 반면에 채널은 버퍼 안에 있는 데이터의 블록을 전달한다. 바이트는 채널에서 읽고 쓰기 전에 먼저 버퍼에 저장되어야 한다. 그리고 데이터는 한 번에 하나의 버퍼씩 읽고 쓴다. 스트림과 채널/버퍼의 두 번째 큰 차이점..
NIO(Nonblock Input/Output) 개요 일반적으로 네트워크의 속도는 컴퓨터의 CPU, 메모리, 심지어 디스크의 속도와 비교해도 매우 느리다. 이러한 상황에서 나오는 현상중 상대적으로 느린 네트워크를 엄청나게 빠른 CPU가 기다리는 것이다. CPU가 느린 네트워크를 기다리지 않고 네트워크보다 앞서 달리게 하기 위한 전통적인 자바의 해결 방안은 버퍼링과 멀티스레드를 결합하는 것이다. 다수의 스레드가 동시에 다수의 서로 다른 연결을 통해 보낼 데이터를 생성한다. 그리고 네트워크가 데이터를 보낼 준비가 될 때까지 해당 데이터들을 버퍼에 저장해 둔다. 그러나 멀티 스레드를 생성할 때 드는 오버헤드와 스레드 전환 시 발생하는 오버헤드를 무시할 수 없다. 그리고 각각의 스레드는 약 1메가 바이트의 메모..
네트워크의 기본 TCP/IP HTTP를 이해하기 위해서는 TCP/IP 프로토콜에 대해 어느 정도 알고 있어야 한다. 인터넷을 포함하여 일반적으로 사용하고 있는 네트워크는 TCP/IP라는 프로토콜에서 움직이고 있다. HTTP는 그 중 하나이다. 컴퓨터와 네트워크 기기가 상호간에 통신하기 위해서는 서로 같은 방법으로 통신하지 않으면 안된다. 그래서 서로 다른 하드웨어와 운영체제을 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요하게 되고 이러한 규칙을 프로토콜이라고 부른다. 프로토콜에는 여러 가지가 있는데 케이블 규격, IP 주소 지정방법, 떨어진 상대를 찾기 위한 방법과 그 곳에 도달하는 순서, 그리고 웹을 표시하기 위한 순서 등이 있다. 이렇게 인터넷과 관련된 프로토콜들을 모은 것을 TCP/IP..