함수 포인터에 대한 이해 예를 들어 Add와 Main 두 개의 함수로 이루어진 Test.exe 프로그램을 실행을 한다고 가정을 해보겠습니다. CPU를 통해 프로그램을 수행하기 위해서는 Add와 Main으로 구성 된 Text.exe를 하드디스크에서 가져와 메인 메모리에 위치 시켜야 합니다. 그리고 함수 포인터(함수의 이름)는 메인 메모리에 위치 한 Add나 Main을 가르키고 있는 포인터가 됩니다. ■ 함수 포인터 타입 함수의 포인터 타입을 결정짓는 요소는 리턴형과 전달인자입니다. C 1 2 3 4 5 6 7 8 9 10 11 int fct1(int num1) // 반환형이 int형이며 전달 인자 int형 변수 하나 { num1++; return num1; } double fct2(double num1, ..
더블 포인터의 이해 더블 포인터도 싱글 포인터와 마찬가지로 메모리 공간의 주소를 저장하는 변수입니다. 다만, 차이가 나는 것은 포인터가 가르키는 대상입니다. 1 2 3 4 5 6 7 8 int main() { int num = 10; //int형 변수 num에 10 할당 int *pointer_num = # //싱글 포인터 선언 및 num의 주소 값 할당 int **double_pointer = &pointer_num; //더블 포인터 선언 및 pointer_num의 주소 할당 printf("%d \n",**double_pointer); //더블 포인터를 통한 num 값 접근 } 결론부터 말하면 더블 포인터는 싱글 포인터의 주소 값을 저장하기 위한 포인터라는 것입니다. 위의 코드 3번 라인에서 i..
함수의 인자로 배열 전달하기 함수의 인자로 배열을 전달하는 방법에 대해서 살펴 보겠습니다. ■ 1. 함수의 인자 전달 방식 함수에서 인자 전달의 기본 방식은 값의 복사에 의한 전달 방식입니다. 함수 호출에서 값의 복사에 의하 인자 전달 방식입니다. 메인 함수에서 num을 인자로 하여 call_Method 함수를 호출 하고 있고 call_Method 함수에서는 같은 이름의 num을 매개변수로 하여 값을 받고 있습니다. 여기서 '복사'의 의미는 단순히 '10'이라고 하는 값이 복사 된 것입니다. 즉 메인 영역의 num변수와 call_Method 함수의 num은 서로 다른 변수이며 어느 한 영역에서 값이 변경 되도 다른 영역의 num 변수에는 영향을 주지 않습니다. 문제는 배열을 통째로 복사하여 인자로 넘겨주..
■ 문자열 표현 방식의 이해 문자열을 표현하는 방식에는 크게 두 가지 방식이 있습니다. 하나는 변수로 표현하는 빙식이고, 또 다른 하나는 상수로 표현하는 방식입니다. 1 2 3 4 5 int main() { char str[6] = "Hello"; // 변수를 활용한 문자열 변수 표현 char *str2 = "Hello"; // 포인터를 활용한 문자열 상수 표현 } 첫 번째는 char형인 str이라는 이름의 배열을 선언하고, 대입 연산자 오른쪽에 선언된 문자열을 할당하고 있습니다. 따라서 str이 저장하고 있는 문자열은 변수가 됩니다. 두 번째 str2는 char형 포인터를 선언하고, 오른쪽에는 "Hello"라는 문자열을 선언합니다. 이는 포인터 str2를 이용해서 문자열 상수 "Hello"를 가리키겠다..
■ 배열의 이름 1 2 3 4 5 6 7 8 9 10 int main() { int num[5] = { 1,2,3,4,5 }; printf("%d\n", num); //배열의 이름 출력 printf("%d, %d\n", &num[0],&num[1]); //배열의 첫 번째 요소와 두 번째 요소 주소 출력 return 0; } int형 배열 num을 선언하고 첫 번째 줄에서 배열의 이름을 출력하고 두 번째 줄에서 배열의 첫 번째 요소와 두 번째 요소의 주소 값을 출력하고 있습니다. 결과를 살펴 보겠습니다. 배열의 첫 번째 요소는 13630876 이고 두 번째 요소는 13630880 입니다. 이는 int형 배열이므로 한 개의 배열 요소가 4바이트의 메모리를 차지한다는 것을 의미합니다. 중요한것은 배열의 이름 ..
포인터 포인터란 메모리의 주소 값을 저장하기 위한 변수로, 기본 자료형 변수와는 달리 메모리 공간의 주소 값을 저장하는데 사용되는 변수를 의미하는 것입니다. 포인터가 변수라는 것을 강조하기 위해 '포인터 변수'라는 표현을 많이 사용합니다. ■포인터 선언하기 123456main (void){ int *a; //a라는 이름의 int형 포인터 char *ch; //ch라는 이름의 char형 포인터 double *d; //d라는 이름의 double형 포인터} 포인터를 선언 할 때는 변수명 앞에 *연산자를 사용함으로써 선언이 가능합니다. ● int *a : int형 변수의 주소 값을 가질 수 있는 int형 포인터 ● char *ch : char형 변수의 주소 값을 가질 수 있는 char형 포인터● double *..
쓰레드 (Thread) 실행 중인 프로그램을 프로세스(Process)라고 부릅니다. 한 개의 프로세스는 한가지 일을 수행하지만 Thread를 사용하게 되면 한 프로세스 내에서 여러가지 작업을 동시에 수행 할 수 있게 됩니다. ■ 기본적인 쓰레드 사용 Thread를 상속받아 run() 메소드를 오버라이딩을 함으로써 간단한 Thread을 구현 해보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class Thread1 extends Thread{ int index ; public Thread1(int index) { this.index = index; } public void run() /..
업캐스팅 (UPCASTING) 상위 클래스의 객체 참조 변수에 하위 클래스의 인스턴스를 대입하는 것을 의미합니다. 모든 객체 내의 모든 멤버에 접근 할 수 없고, 상위 클래스의 멤버에만 접근이 가능합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 public class Main { public static void main(String argsp[]) { Top top = new Top(); //상위 클래스 타입에 상위 클래스 인스턴스 대입 top.show(); top = new Bottom(); //상위 클래스 타입에 하위 클래스 인스턴스 대입 top.show(); } } public cl..
쿠키를 이용한 로그인 상태 유지하기 웹 사이트의 기본 기능 중 하나는 로그인/로그아웃 기능입니다. 로그인을 하지 않은 상태에서 웹 사이트에 연결을 하면 로그인을 하도록 유도를 하는데, 이는 로그인을 했는지 판단 할 수 있는 방법이 필요하다는 뜻입니다. 로그인 상태를 확인할 때 가장 많이 사용하는 방법이 바로 쿠키를 이용하는 방법입니다. 쿠키를 이용하여 다음과 같은 방법으로 로그인 상태를 유지 할 수 있습니다. 1. 로그인에 성공하면 특정 이름을 갖는 쿠키를 생성한다. 2. 해당 쿠키가 존재하면 로그인한 상태라고 판단한다. 3.로그아웃하면 해당 쿠키를 삭제한다. 로그인 처리 먼저 로그인 처리가 되는 페이지를 작성하기전에 간단한 로그인 폼을 작성합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 ..
SRP - 단일 책임 원칙 모든 객체는 하나의 책임만을 가지면 객체가 제공하는 서비스는 하나의 책임을 수행하는데 집중 되어야 한다. 즉 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. 단일 책임 원칙이 잘 자켜지지 않은 경우는 분기 처리를 위한 if문으로 코드를 보도록 하겠습니다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Person { public String job; public Person(String job) { this.job = job; } public void Work() { if(job.equals("Programmer")) System.out.println("코딩하다");..
HashMap HashMap은 key와 value를 하나의 쌍으로 묶어서 저장하는 컬렉션 인터페이스로 해싱 검색을 사용하기 때문에 데이터 접근이 빨라 대용량 데이터 처리에 적합합니다. key값은 중복된 값을 사용 할 수 없고 value는 중복된 값을 사용가능 하고 Null도 허용이 됩니다. ■ 주요함수 메서드 인자정보 설명 put (key , Value) haspmap에 한 쌍의 데이터를 넣습니다. clear 인자없음 hashmap의 내용을 초기화합니다 contatinsKey (Object key) 특정 키가 Hashmap에 존재 유무를 판단 get (Object key) 특정 키의 value값을 가지고 옵니다 remove (Object key) 특정 키 값의 map을 제거합니다. size 인자없음 해당..
쿠키(Cookie) 쿠키(Cookie)는 웹 브라우저가 보관하는 데이터입니다. 웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송하며, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있습니다. JSP에서 생성하는 쿠키는 웹 서버에서 생성 할 수 있습니다. ■ 쿠키 동작 방식 ● 쿠키 생성 단계 : JSP 프로그래밍에서 쿠키는 웹 서버측에서 생성되어, 생성한 쿠키를 응답 데이터의 헤더에 포함시켜 웹 브라우저에 전송합니다. ● 쿠키 저장 단계 : 브라우저는 응답 데이터에 포함된 쿠키를 저장합니다. ● 쿠키 전송 단계 : 브라우저는 저장한 쿠키를 요청이 있을 때마다 웹 서버에 전송합니다. 웹 서버는 전송받은 쿠키를 이용해서 필요한 작업을 수행합니다. ■ 쿠키의 구성 ● 이름 ..
클래스 다이어그램 클래스 다이어그램은 시스템의 정적인 상태인 '논리적인 구조'를 표현합니다. 클래스 다이어그램의 주목적은 클래스간의 관계를 한눈에 파악하는데 있습니다. ■ 클래스의 표현 Class Name Attribute1 Attribute2 operation1(인자타입):반환타입 operation2(인자 타입):반환타입 일반적인 클래스는 사각형으로 표시되고 맨 상단은 class의 이름에 해당됩니다. 중단은 클래스가 포함하고 있는 멤버 변수들이오고 접근 제한자 public,private,protection에 대해서 각각 +,-,# 으로 표현이 됩니다. 하단에는 클래스가 포함하고 있는 메서드들이 표현이 됩니다. 원본 소스입니다. Person 클래스를 클래스 다이어그램으로 표현합니다. 인터페이스나 추상 클..
this 키워드 자기 자신애 대한 객체 참조값을 가진다. 메서드 내에서 사용되어 지고 static 메서드에서는 사용 할 수 없다. ■ 매개변수와 객체가 가지는 변수의 이름이 같을 경우 보통 생성자의 인자로 받는 변수의 이름이랑 객체에 속해있는 멤버변수의 이름이 같을 경우에 이 두개를 구분하기 위해 this 키워드를 사용합니다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class student { private String name; private int age; private String email; private String number; public student(String name,int age,String ..
Final 키워드 final은 마지막, 최종적이라는 의미를 가지고 있기 때문에 변수나 메서드의 내용을 수정하지 않고 고정 시킬 때 사용하는 키워드 입니다. ▶ 클래스에의 final 키워드 클래스에 final 키워드가 붙는 경우는 '상속 불가'의 의미를 가집니다. 1 final public class A {} A 클래스를 final 키워드를 통해 다음과 같이 정의를 하였습니다. 1 public class B extends A{} B 클래스가 A클래스를 상속받게 하면 다음과 같은 오류가 발생합니다. B 클래스는 A클래스의 하위 클래스가 될 수 없다는 오류가 발생합니다. ▶ 메서드의 fnal 키워드 메서드의 final 키워드가 붙는 것은 '재정의 불가'를 의미합니다. 상위 클래스의 메서드를 하위 클래스에서 오..