CS
1강. 프로그래밍 언어 활용_PL(1), (2)
해당 글은 Inflearn의 국립안동대학교 SW융합교육원에서 제작된 '정보처리기사 자격증 대비 교육(실기)' 강의 정리본임을 알립니다.참고 : https://www.inflearn.com/course/정보처리기사-자격증-대비교육-실기/dashboard
프로그래밍 언어 활용
| 001 C언어와 JAVA언어의 기본문법구조
1. C언어와 JAVA 언어의 개요
1) C언어
1972년
유닉스 운영체제 개발에 사용할 목적
특징
논리적이고 구조적인 시스템
하드웨어 제어가 가능, 프로그램 이식성 높음
간략한 문법 표현으로 함축적인 프로그램 작성이 용이
효율성과 유연성을 가진 저급 언어 특성을 가진 고급 언어

C언어는 컴파일러형 언어이다.
단계
소스 파일(.c)은 컴파일러를 통해 목적 코드(.obj)로 변환된다.
이후 링커(Linker)가 헤더 파일(.h)과 라이브러리를 연결하여 실행 파일(.exe)을 생성한다.
마지막으로 로더(Loader)가 실행 파일을 메모리에 적재(load) 하여 프로그램이 실행된다.
2) JAVA언어
1996년
객체 지향 프로그래밍 언어
프로그래밍 언어와 함께 실행 환경(플랫폼)을 포함한다.
특징
플랫폼 독립적이다.
상속을 지원하는 객체 지향 프로그래밍 언어(Object-Oriented PL)

Java 플랫폼 구성
Java VM (가상머신) : Java 바이트코드를 실행하는 환경
Java API : 클래스와 라이브러리 집합 (예: java.lang, java.util 등)
2. C 언어의 기본 구조
소스코드는 파일명 .c로 작성
절차절 프로그래밍의 대표적인 언어는 함수 중심

1) C언어의 main() 함수는 여러 가지 방법 중 선언할 수 있다.

3. JAVA언어의 기본 구조
소스코드는 클래스명.java로 작성되어 있다.
클래스명은 반드시 대문자로 시작해야 한다.
클래스들 중심으로 되어 있으며, 클래스 내의 메소드 통해 기능을 구현한다.

여러 개의 java 파일 중 하나만 main 메소드를 갖게 된다. (public 클래스, 실행 클래스)
4. C언어와 JAVA언어의 기본 소스코드의 비교

5. C언어와 JAVA 언어의 프로그램 구성 요소
1) C언어
(1) 예약어(reserved word) : 키워드
자료형관련, 기억관련, 제어관련, 기타
int, char, static, if~else, for, while, include 등
(2) 명칭(identifier) : 식별자
변수명, 배열명, 함수명, 매크로명
(3) 상수(constant)
정수상수, 실수상수, 문자상수, 문자열상수
(4) 연산자(operator)
(5) 설명문(comment) : 주석
비실행문
한 줄 주석 : // C언어 공부 방법
여러 줄 주석 : /* 다양한 코드를 살펴보며, 코드에 주석을 적어보기! */
2) JAVA 언어 (1) 예약어(reserved word) : 키워드
자료형관련, 기억관련, 제어관련, 기타
int, char, static, if~else, for, while, import 등
(2) 명칭(identifier) : 식별자
클래스명, 메소드명, 변수명, 배열명, 함수명
(관례) 클래스 이름은 대문자로 시작, 메소드나 필드, 변수의 이름은 소문자로 시작
(3) 상수(constant)
논리상수, 정수상수, 실수상수, 문자상수, 문자열상수
(4) 연산자(operator)
(5) 설명문(comment) : 주석
비실행문
한 줄 주석 // JAVA언어 공부 방법
여러 줄 주석 : /* 다양한 코드를 살펴보며, 코드에 주석을 적어보기! */
6. C언어와 기본 문법 구조와 printf() 함수
prinf() 함수
기능 : 출력 양식으로 자료(상수)를 출력하는 함수
형식#Include <stdio.h>printf("출력형식", 출력대상1, 출력대상2);
특징
#include <stdio.h> 필수
함수 종류 : printf(), scanf(), getchar(), putchar(), gets(), puts(), fgets(), fputs()
출력형식 변환 문자
%d : 10진 정수로 변환
%f : 부동소수점을 실수로
%c : 한 문자로 변환
%s : 문자열로 변환
%o : 8진 정수
%x : 16진 정수
%u : 부호 없는 10진 정수
%e : 지수
7. JAVA의 System.out.print()와 System.out.println()
System.out.println( )은 java.lang 패키지에서 제공하는 표준출력문(메소드)이다.
괄호 사이에 출력하고자 하는 변수나 문자열이 올 수 있다. 원하는 내용이 출력된 후 ‘줄 바꿈’이 자동으로 이루어진다.
반면, System.out.print( )는 출력 직후 자동 줄 바꿈을 하지 않고 같은 줄에 커서가 머물러있게 된다.
System.out.println()와 System.out.print()에서 여러 항목을 이어서 출력하고자 할 경우는 별도의 출력형식 지정 없이 항목들의 접속(concatenation)을 의미하는 기호 ‘+’를 사용하면 된다.

print, println, printf

x+y = 30이 아닌, x+y = 1020
| 002 데이터 타입
1. 데이터 타입의 정의
자료형 : 변수가 가질 수 있는 데이터(값)의 유형
프로그램 작성 시, 자료형을 결정하여 변수를 선언
2. 데이터 타입의 분류
1) 기본 데이터 타입
정해진 구조 외에 다른 구조를 가질 수 없는 자료형 (컴파일러가 이미 알고 있음)
종류 : 논리형, 문자형, 정수형, 실수형
2) 구조적 데이터 타입 (= 확장 데이터 타입 = 사용자 정의 데이터 타입)
기본 자료형으로부터 파생하여 만든 자료형 (컴파일러에게 알려줘야 함)
종류 : 배열(같은 자료형 자료 모임), 레코드(다른 자료형 자료 모임), 포인터형, 문자열형
3. 기본 데이터 타입
1) 논리형
참과 거짓 두 개의 상수만 존재한다.
C언어의 기본 데이터 타입은 아니다.
JAVA : true, false / Python : True, False
2) 문자형
단일 문자의 자료형
작은따옴표로 표현된 상수들
예 : 'a', 'A', '1', ' ', '!' 등
특징 : 'A'
C, C++ : char 형 (1byte, 아스키코드)
JAVA, Python : char 형 (2byte, 유니코드)
3) 정수형
고정 소수점 타입
부호는 있고, 소수점이 없는 정수 상수
예 : +1, -2, +123, -123 등
4) 실수형
부동 소수점 타입
부호와 소수점이 있는 실수 상수
예시 : +3.14, -3.14, +1.0, -123.0 등
4. 구조적 데이터 타입 (= 확장 데이터 타입 = 사용자 정의 데이터 타입)
: 여러 자료를 하나의 단위로 묶어 취급한다.
1) 배열(Array)
동일한 유형의 값들을 모아 놓은 자료형
순차 구조, 첨자(index)로 배열 원소를 구별
1차원 구조, 2차원 이상의 다차원 구조
2) 레코드(Record) = C언어 : 구조체(struct), 공용체(union)
서로 다른 유형의 값들을 모아 놓은 자료형
이름으로 원소를 구별
3) 포인터형(Pointer)
객체를 참조하기 위해 메모리의 주소를 값으로 하는 자료형
커다란 배열의 원소를 효율적으로 저장하고자 할 때 이용
지원 프로그래밍 언어 : C, C++
4) 문자열형(Character String Type)
문자열(단일 문자들)의 자료형
큰따옴표로 표현된 상수들
기본 데이터 타입이 아니다.
JAVA도 기본 자료형이 아니다.
5. 프로그래밍 언어의 기본 데이터 타입(Primitive Type) 및 크기
자료형의 예약어는 모두 소문자
C++ 언어의 논리형의 예약어는 bool
Python의 long형은 무한 크기 (= 동적 타이핑)
C# 언어의 실수형에는 Decimal(16byte)가 존재

String은 기본 데이터 타입이 아니다.

| 003 변수와 상수
1. 상수(constant)의 개념
항상 고정된 값을 갖는 자료(값)로, 변경 불가능하다.
유형 : 정수형, 실수형, 문자형, 문자열형, 논리형
수명 시간 동안 고정된 하나의 값과 이름을 가진 자료
프로그램이 동작하는 동안 값이 바뀌지 않는 공간
2. C 프로그램의 상수

3. 변수 (variable)
프로그램 실행 중 변경할 수 있는 값이 저장되는 기억공간 (= 메모리)
프로그램에서 하나의 값을 저장할 수 있는 기억 장소의 이름
변수의 구성 : 이름, 값, 속성, 참조
변수명 : 언어 별로 변수명을 만드는 규칙에 따라 다르다.
변수의 데이터 타입은 컴파일 시간에 한 번 정해지면, 일반적으로 그대로 유지한다.

변수의 4요소
선언문 : 주소, 이름, 자료형
대입문 : 값
바인딩: 어떤 변수의 명칭과 그 메모리 주소, 데이터형 또는 실제 값을 연결하는 것
바인딩 시간 : 변수들이 갖는 속성이 완전히 결정되는 시간
바인딩의 종류 : 정적 바인딩(번역 시간, 데이터영역/스택영역), 동적 바인딩(실행 시간, 힙영역)
4. 변수의 선언문
1) 변수의 선언문
변수명과 자료형을 결정하여, 기억공간을 할당하는 것
정적형 검사가 가능하다.
형식 : 자료형 변수명;
2) C언어의 변수명 정의 규칙
영문 대소문자, 숫자를 혼합
대소문자 구별
예약어 사용 금지
밑줄(_)을 제외한 모든 특수문자 사용 금지
숫자로 시작 금지

C언어는 주로, 스네이크 케이스 팟홀 방식
JAVA언어는 주로 카멜 케이스, 파스칼 케이스 방식
5. 변수의 대입문 및 초기화
1) 변수의 대입문
변수(기억공간)에 자료(값)를 대입(할당, 배정, Assign)하는 것
변수의 내용(값)을 변경하는 문장
형식 : L-VALUE = R-VALUE;
예시 : a = 20;
2) 변수의 초기화
변수의 선언문과 대입문을 구별하여 코딩할 수 있지만, 초기화를 통해 변수선언이 이루어짐과 동시에 특정 값을 부여할 수도 있다.
예시 : int kor = 90;
6. 변수와 c언어의 scanf() 함수
콘솔(키보드)을 통해 사용자가 직접 원하는 값을 변수에 대입
기능 : 콘솔화면에서 키보드로부터 자료(상수)를 주어진 입력 형식으로 입력시키는 함수
형식: #include <stdio.h>scanf("입력 형식", &입력대상1, &입력대상2, ...);
입력 형식 변환 문자
%d : 10진 정수로 변환
%f : 부동소수점을 실수로
%c : 한 문자로 변환
%s : 문자열로 변환
%ld : long 정수
%lf : double 실수
%o : 8진 정수
%x : 16진 정수