개발자 18

[ C ] 14. goto에 관하여

[ goto에 관해 ] goto는 별다른 제약 조건 없이 원하는 부분으로 이동할 수 있기 때문에 초보 때는 goto를 남발하는 경우가 많다. 그러다 보니 처음에는 goto는 가급적 사용하지 말라고 한다. 하지만 goto를 적절히 활용하면 중복되는 코드를 없애고 코드를 좀 더 간결히 만들 수 있을 것이다. 특히 에러처리에 매우 유용하기 때문에 리눅스커널에서도 자주 쓰이며 for, switch 등 중첩 반복문에 많이 쓰이는 것을 알아두자. # 스파게티 코드 스파게티 코드는 `goto`를 과도하게 사용해서 프로그램의 흐름이 마치 스파게티 면발처럼 꼬여있다는데서 붙여진 이름이다. 그래서 스파게티 코드는 가독성이 떨어지고 유지보수가 매우 힘들다. goto와 레이블 #define _CRT_SECURE_NO_WARN..

[ C ] 12. 함수와 가변인자

[ 함수와 가변인자 ] printf, scanf와 같이 매개변수의 개수가 정해지지 않은 개수가 있다. 이렇게 매번 함수에 들어가는 인수(argument)의 개수가 변하는 것을 가변 인자(가변 인수, variable argument)라고 한다. 함수에서 가변인자를 정의할 때는 고정 매개변수가 한 개 이상 있어야 하며 고정 매개변수 뒤에 ...을 붙여 매개변수의 개수가 정해지지않았다는 표시를 해준다. 단, ...뒤에는 다른 매개변수를 지정할 수 없다. 반환값 자료형 함수이름(자료형 고정매개변수, ...){ } #include // args는 고정 매개변수 void printNumbers(int args, ...){ printf("%d ", args); } int main(){ printNumbers(1, 1..

[ C ] 07. 열거형

[ 열거형 ] 열거형은 정수형 상수에 이름을 붙여 코드를 이해하기 쉽게 해준다. 만약 여러개 정수형 상수를 선언한다면 두세 개까지는 괜찮지만 개수가 많아지면 귀찮아 질 것이다. 열거형을 사용하면 정수형 상수를 좀 더 편하게 정의할 수 있다. enum 열거형이름{ value1 = 초깃값, value2, value3 }; 열거형은 정의로만 사용이 안되고 변수로 선언해서 사용해야 한다. enum 열거형이름 변수이름; #include enum DayOfWeek{ // 열거형 정의 Sunday = 0; // 초깃값 할당 Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; int main(){ enum DayOfWeek week; // 열거형 변수 선언 week ..

[ C ] 04. 포인터의 형변환

[ 포인터의 형변환 ] #include #incldue // malloc, free 함수가 선언된 헤더파일 int main(){ int *numPtr = malloc(sizeof(int)); // 4바이트만큼 메모리 할당 char *cPtr; *numPtr = 0x12345678; cPtr = (char *)numPtr; // int 포인터 numPtr을 char 포인터로 변환. 메모리 주소만 저장됨 printf("0x%x\n", *cPtr); // 0x78 : 낮은 자릿수 1바이트를 가져오므로 0x78 free(numPtr); // 동적메모리 해제 return 0; } # 실행 결과 0x78 numPtr에 메모리를 할당하고 역참조하여 0x12345678을 저장했다. 그리고 cPtr = (char *)n..

[ C ] 03. 포인터와 역참조 연산자

[ 포인터와 역참조 연산자 ] 포인터 변수에는 메모리 주소가 저장되어 있다. 이 때 메모리 주소가 있는 곳으로 이동해서 값을 가져오고 싶다면 역참조 연산자 *를 이용한다. #include int main(){ int *numPtr; // 포인터 변수 선언 int num1 = 10; // 정수형 변수를 선언하고 10 저장 numPtr = &num1; // num1의 메모리 주소를 포인터 변수에 저장 printf("%d\n", *numPtr); // 10 // 역참조 연산자로 num1의 메모리 주소에 접근하여 값을 가져온다 return 0; } # 실행 결과 10 역참조 연산자 *는 포인터 앞에 붙인다. 다음과 같이 numPtr 앞에 *를 붙이면 numPtr에 저장된 메모리 주소로 가서 값을 가져온다. 여기..

[ C ] 01. 동적할당이란?

[ 동적할당 ] 동적할당이라는 것은 프로그램 실행중에 동적으로 메모리를 할당하는 것을 말한다. 여기서 중요한것은 동적으로 메모리를 할당할때 Heap(힙)영역에 할당한다는 것이다. # 함수원형 void* malloc(size_t size) 해당함수를 사용하기 위해서는 헤더파일을 include해야한다. 함수 동작은 매개변수에 해당하는 size_t 만큼의 크기만큼 메모리를 할당하고 성공하면 : 할당한 메모리의 첫 번째 주소 리턴 실패하면 : NULL 리턴 제일 중요한점 !! 할당한 메모리는 꼭 해제해주어야한다.!! 그렇지 않으면 메모리 릭, 메모리 누수가 발생한다. 함수 원형 메모리 할당 void *malloc(size_t size); - 할당받을 메모리 크기를 인자로 받는다 - ex) int * arr = ..

[ C ] 00. 함수 호출방식

[ 함수 호출방식 ] Call-by-value 값에 의한 호출 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.(c++의 경우 stack frame) => 함수가 종료되면 해당 공간은 사라진다. 스택 프레임(Stack Frame) : 함수 호출시 할당되는 메모리 블록(지역변수의 선언으로 인해 할당되는 메모리 블록) call-by-value 값에 의한 호출방식은 함수 호출 시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다. 복사된 인자는 함수 안에서 지역적으로 사용되는 local value의 특성을 가진다. 따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되지 않는다.!! 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다. 단..

[ Embedded ] 01. 메모리와 프로세스에 관하여

메모리 RAM 컴퓨터를 종료하면 데이터가 날아가는 휘발성 메모리 하드 디스크나 CD와는 달리 속도가 매우 빠르다.(데이터에 랜덤하게 접근할 수 있음) 컴퓨터는 대부분의 데이터들은 메모리에 보관해 놓고 작업을 한다. 틈틈이 하드디스크에 저장! ROM 컴퓨터를 종료해도 데이터가 날아가지 않는 비휘발성 메모리 ex) CD-ROM, DVD-ROM, 하드디스크 => (데이터에 순차적으로 접근한다) 컴퓨터의 한 개의 메모리 소자는 0 혹은 1의 값을 보관할 수 있다. 이 이진수 한 자리를 가리켜 비트(Bit)라고 한다. 따라서, 1개의 비트는 0 또는 1의 값을 보관할 수 있다. 8bit = 1byte 8bit(1byte)로 나타낼 수 있는 최대의 수는 0 ~ 0xFF. 0부터 255로 총 256개의 수를 나타내게..

[ 기타 ] IT 프로젝트에 관하여

19-12-24 프로젝트 관리 수주업의 개념 사업기획 및 발주 - 제안 - 계약 및 협상 - 프로젝트 수행 fresales IT 이익률?? 보통 5%이내?! 보통기업은 최소 20%는맞춰야 한다. 1. 컨설팅 프로젝트 기업의 중장기 IT 전략 수립 => 3~5년 중장기 IT 투자계획 Masterplan SP(Strategy Planning) 컨설팅 회사에 의뢰?! why? => 내부적으로 말고 외부적으로 전체적으로 검토하기 위해 ​ (경쟁사 등등) => 객관적인 시각 수주.. 인력감소... 현대차노조... 스마트팩토리못하게막아... 2. SI사업 SI 대부분 신규 시스템,기술 기술을 연계하고 통합(난이도 上) 업무강도 上 성장을 하고. 도전적. 배움의 즐거움. => Career path..

IT/[ 기타 ] 2020.08.12

[ Network ] 00. 네트워크란 무엇인가

Network 20-04-22 수 TCP ? UDP? 프로토콜? 프로토콜 : 약속 TCP통신을 할거야 우린~ => 연결지향 : 데이터를 보내고 잘 갔는지 확인하고 제대로 안갔으면 다시 확인 네트워크프로그래밍 : 서버가 있어야 해요~ pc&pc연결 ~ => 서버와 클라이언트를 만들어야 한다. 어떤식으로 데이트를 받고 데이터를 처리해야하겠다라고 명시해놓은 pc가 있어야한다.(서버) 요청을하는pc(클라이언트) 우리는 그동안 서버역할을 하는 tomcat(웹)이나 oracle(DB)을 설치해서 사용했다. 자바에서 "쓰레드", "네트워크", "IO"에 대한 기본 개념은 필수이다! > URLTest2.java URl객체를 생성 image copy image폴더에 저장

[ Django ] 06. Django relation 1:N 복습

1:N 관계 복습 유저 생성 ORM User.objects.create(username='test', password='test') 게시글 생성 ORM $ python manage.py shell_plus user1 = User.objects.get(pk=2) In[] user1 Out[] Article.objects.create(title='aaaa', content='bbbbb', user=user1) Article.objects.create(title='aaaa', content='bbbbb', user_id=user1.pk) 댓글 생성 ORM comment = Comment.objects.get() comment.article.pk 4 comment.article.title title articl..

[ Django ] 05. Django relation 1:N (사용자 분할)

django relation 1:N 06/22 cascade만 사용 django 확장 툴 설치 $ pip install django-extensions settings에 등록해줘야 한다. 'django_extensions' 으로 등록 쉘창을 켠다 -> mysite 위치로 가서 켜야한다. $ python manage.py shell_plus ipython 설치 $ pip install ipython 0623 Admin 관리자 계정 생성 # musicians/admin.py -admin 정의 from.models import Musician, Album admin.site.register(Musician, Alubm) # bash 관리자계정 생성 python manage.py createsuperuser h..

[ Django ] 01. Django ORM 활용

Django ORM Object Relational Mapping 스프링에서는 mybatis를 썼었고, 장고에서는 이를 위한 기능이 따로 존재한다! 드디어 models.py를 사용하기 시작합니다~ 파이썬의 객체와 DB의 객체를 Mapping해주어야 한다. 그럼 파이썬의 객체는 어떻게 생성하는 가? Articles에 models 작성 # models.py # Create your models here. class Article(models.Model) : # articles_article # CharField 는 글자 수 제한 할 때 사용 title = models.CharField(max_length=150) content = models.TextField() created_at = models.Date..

[ Django ] 00. Django 알아보기

django 파이썬으로 이루어진 WEB 프레임워크. django의 성격 파이썬을 이용하기 때문에 개발 속도가 빠르다. 프레임워크라는 것은? ----> 프랜차이즈의 성격을 갖는다 ( 내가 다 줄테니 너넨 사용만 해라~ ) why django? 풍부한 언어와 프레임워크 사용 경험을 배양하기 위함. MTV 스프링의 MVC패턴과 같은 패턴임 Model - Template(사용자가 보는 화면) - View(중간 관리자) URLs: 단일 함수를 통해 모든 URL 요청을 처리하는 것이 가능하지만, 분리된 뷰 함수를 작성하는 것이 각각의 리소스를 유지보수하기 훨씬 쉽습니다. URL mapper는 요청 URL을 기준으로 HTTP 요청을 적절한 view로 보내주기 위해 사용됩니다. 또한 URL mapper는 URL에 나타..

[ DB ] 01. SQL

1. SQL 저장된 데이터(정형화)를 사용하는 언어가 SQL이다. (몇개 테이블을 쓸 것인가) - 조인 어떤 것을 조회할 것인가? = 무엇을 추출할 것인지 어떤 조건이 있는가? 1. 초기 환경설정 server - setwork - admin - ( listerner.ora , tnsnameora ) - 모두 영문 내용이어야함 오류 발생시 시스템관리도구 - 서비스 - OracleTNSListener 다시시작 scott 계정생성과 권한부여하기 set linesize 300; -> 접속할때마다 해줘야함 2. 기본문법 1. SQL 개요 1. DDL(데이터 정의 언어) CREATE : 데이터베이스나 테이블 등을 작성한다. DROP : 데이터베이스나 테이블 등을 삭제한다. ALTER : 데이터베이스나 테이블 등의 ..