배열 배열은 데이터를 메모리의 연속된 공간에 나열하고 각 데이터에 인덱스를 부여한 자료구조이다. 배열은 같은 타입의 데이터만 저장할 수 있고 한 번 생성된 배열은 길이를 수정할 수 없다. 배열 변수 선언 배열을 사용하기 위해서는 배열 변수를 선언해줘야 한다. 배열도 참조 타입이기 때문에 힙 영역에 배열 객체 생성 후 그 번지를 변수에 저장한다. 배열 변수를 선언하는 방법은 두가지가 있다. 1. 타입[] 변수 2. 타입 변수[] 대괄호는 배열 변수를 선언하는 기호로 변수명 앞이나 뒤에 붙을 수 있다. 배열 생성 배열을 생성할 때도 값 목록을 사용하거나 new 연산자를 사용하는 두가지 방법이 있다. 값 목록으로 배열 생성 타입[] 변수명 = { 값0, 값1, ...}; 형식은 위와 같다. 중괄호는 주어진 값..
자바의 데이터 타입 자바의 데이터 타입은 기본 타입과 참조 타입으로 나뉜다. 기본 타입은 정수, 실수, 논리 타입을 말하고 참조 타입은 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다. 문자열을 저장하는 String도 참조 타입이다. 자바에서는 문자열을 값이 아닌 객체로 취급하기 때문에 참조 타입 변수에 문자열을 저장 시 힙 영역에 String 객체 생성 후 그 안에 문자열을 저장한다. 그리고 변수에는 String 객체의 번지가 저장되고 변수는 해당 번지를 참조하여 문자열에 접근할 수 있다. 기본 타입 변수는 변수에 값이 그대로 저장되고 참조 타입 변수는 힙 영역에 생성된 객체의 번지를 갖고 있다 이게 둘의 차이~ 메모리 사용 영역 JVM은 운영체제에서 할당받은 메모리 영역을 ..
java 코드 실행 과정 java를 사용해 확장자가 .java인 텍스트 파일을 생성 후 => javac 명령어를 통해 컴파일하면 확장자가 .class인 바이트 코드 파일이 생성된다. => .class 파일은 완전한 기계어가 아니기 때문에 바로 실행이 불가함. => java 명령어를 통해 .class 파일 실행 가능 .java 소스 코드 작성 => javac로 컴파일 => .class 바이트 코드 파일 생성 => java로 실행 java가 jvm을 사용하는 이유 바이트 코드 파일(.class)은 운영체제에서 바로 실행되지 않고 jvm(java virtual machine)을 통해 실행된다. jvm은 바이트 코드 파일을 OS를 위한 완전한 기계어로 번역하고 실행하는 역할을 하며 java 명령에 의해 구동된다..
vim은 리눅스에서 제공하는 문서 편집기로, 유닉스의 문서 편집기인 vi를 업그레이드 한 것이다. 기본적인 사용법은 vi와 비슷하다. 리눅스도 GUI 형태로 문서를 편집할 수 있는 환경인 그놈이 존재하지만, 명령과 문서 편집을 왔다갔다하며 할 수는 없기 때문에 터미널에서 문서를 편집하기 위해서는 다른 편집기가 필요하다. 편집기에는 모드형과 비모드형이 있다. 모드형은 텍스트를 입력하는 입력 모드와 텍스트를 수정, 삭제, 복사, 붙여넣기 등을 하는 명령 모드가 나뉘어 있다. 입력 모드에서 키를 누르면 텍스트가 입력되지만 명령 모드에서 키를 누르면 명령이 실행된다. 입력 모드에서 j 입력 시 텍스트가 삽입되지만 명령 모드에서 j를 누르면 커서가 한 줄 아래로 이동한다. vi는 모드형 편집기이다. 비모드형은 나..
파일 관련 기타 유용한 명령 touch 빈 파일을 생성한다. 형식 : touch [-acm] [-r ref_file | -t time] [파일] 옵션 -a : 접근 시간만 변경한다. -m : 수정 시간만 변경한다. -t : [[CC]CC]MMDDhhmm[.ss] : 시간을 직접 입력한다 grep 파일 내용 검색하기. 파일 내에서 특정 문자열을 검색할 때 사용한다. 형식 : grep [옵션] [패턴] [파일] 옵션 -i : 대소문자를 모두 검색 -l : 지정한 패턴이 포함된 파일명을 출력. -n : 행 번호 출력 find 파일을 찾는다. 파일 내용을 검색하는 grep과는 다르게 파일을 검색한다. 형식 : find [경로] [검색 조건] [동작]
포인터 배열과 포인터 배열의 포인터 형 1차원 배열의 포인트 형은 배열의 첫번째 요소의 자료형에 따라 결정된다. 1차원 포인터 배열도 마찬가지이다. int * intarr[20]; double * dbarr[10]; 위에서 선언된 배열 intarr의 첫번째 요소는 int형 싱글포인터이다. 따라서 배열 intarr의 포인터 형은 int형 더블포인터가 된다. 마찬가지로 배열 dbarr는 double형 싱글포인터를 요소로 가지므로 double형 더블포인터가 된다. int num1=10, num2=20, num3=30; int * ptr1=&num1; int * ptr2=&num2; int * ptr3=&num3; int * ptrArr[3]={ptr1, ptr2, ptr3}; int **pptr=ptrArr;..
이중 포인터 포인터의 포인터를 이중 포인터 또는 더블 포인터라고 한다. 이중 포인터 변수는 * 연산자를 두번 사용하여 나타낸다. 싱글 포인터 변수는 변수의 주소를 저장한다. 이중 포인터 변수도 마찬가지로 주소를 저장하는데 그 대상이 포인트 변수라는 점만 다르다. int num = 100; int * ptr = # int ** pptr = &ptr; 위와 같이 사용할 수 있다. num == *ptr == **pptr 모두 num을 의미한다. int num = 100; int * ptr = # int ** pptr = &ptr; num = 200; *ptr += 10; **ptr += 20; printf("num = %d \n", num); printf("*ptr = %d \n", *ptr);..
리눅스 파일 파일 리눅스는 유닉스 계열의 운영체제로 유닉스의 많은 부분을 이어받았기 때문에 유닉스와 마찬가지로 시스템 정보나 장치등을 파일을 이용해 관리한다. 리눅스 파일의 특징 대소문자 구분 확장자 없음 파일마다 접근 허가권, 소유권 보유 파일은 일반 파일, 디렉토리, 심볼릭 링크, 장치 파일로 구분할 수 있다. 일반 파일 : 주로 데이터를 저장하며 텍스트 파일, 이미지 파일, 실행 파일 등이 이에 해당. 디렉토리 : 리눅스는 디렉토리도 파일로 관리한다. 다른 파일이나 하위 디렉토리를 포함하고 있음. 심볼릭 링크 : 다른 파일을 실행하는 링크. 윈도우의 바로가기 파일과 마찬가지이다. 장치 파일 : 앞서 말했듯 장치(하드웨어)도 파일로 관리한다. 리눅스에 연결된 장치를 관리하기 위한 특수 파일이다. 리눅..
다차원 배열 다차원 배열은 2차원 이상의 배열을 말한다. 2차원, 3차원, 4차원 ... C언어는 4차원 이상의 배열도 문법적으로는 허용한다. 그러나 4차원 이상의 배열은 불필요하고 논리적으로 이해하기도 힘들기 때문에 다차원 배열은 2, 3차원 배열을 말하는 것으로 이해하는 것이 좋다. 선언 방법은 다음과 같다. 자료형 배열명[세로][가로];//2차원 배열 자료형 배열명[세로][가로][높이];//3차원 배열 1차원 배열 선언 시에는 []안의 수가 요소의 수를 의미했지만 다차원 배열에서는 순서대로 세로, 가로, 높이를 의미한다. 2차원 배열은 면으로, 3차원 배열은 직육면체 개념으로 생각하면 이해가 쉽다. 그렇다면 실제 메모리에도 면, 직육면체 형태로 할당되어 있을까? 메모리는 1차원 구조이기 때문에 실제..
리눅스의 특징 리눅스는 크게 커널, 셸, 응용 프로그램으로 구성되어 있다. 커널은 리눅스의 핵심으로 프로세스 관리, 메모리 관리, 파일 시스템 관리 등 컴퓨터의 모든 자원을 초기화하고 제어한다 셸은 커널와 사용자 사이를 이어주는 역할로 사용자가 셸에 명령을 전달하면 셸이 명령을 해석하여 커널에 전달해주고 커널이 작업을 수행한 결과를 다시 해석하여 사용자에게 전달한다. 리눅스는 배시셸을 사용한다. 응용 프로그램에는 문서 편집 도구, 프로그래밍 개발 도구 등이 지원된다. 명령어 date 형식 : date 날짜와 시간을 출력한다. clear 형식 : clear 화면을 지운다. 명령어를 실행하면 화면에 있던 내용들이 모두 지워진다. 사실 지워지는 것은 아니고 스크롤을 위로 올리면 나온다. man 형식 : man..