728x90

 

 

자바 | 자바 학습을 시작하는 방법

Java는 가장 널리 사용되고 널리 사용되는 프로그래밍 언어 및 플랫폼 중 하나입니다. 플랫폼은 모든 프로그래밍 언어로 작성된 프로그램을 개발하고 실행하는 데 도움이되는 환경입니다.
Java는 빠르고 안정적이며 안전합니다. 데스크탑에서 웹 애플리케이션, 과학 용 슈퍼 컴퓨터, 게임 콘솔, 휴대 전화, 인터넷에 이르기까지 Java는 구석 구석마다 사용됩니다.

자바에 대하여

    • Java는 간단한 언어입니다. Java는 배우기 쉽고 구문은 명확하고 간결합니다. C ++을 기반으로합니다 (따라서 C ++을 아는 프로그래머에게는 더 쉽습니다). Java는 명시 적 포인터, 연산자 오버로드 등과 같이 혼란스럽고 거의 사용되지 않는 많은 기능을 제거했습니다. Java는 메모리 관리도 담당하며 자동 가비지 수집기도 제공합니다. 사용하지 않는 개체를 자동으로 수집합니다.
    • Java는 플랫폼 독립적 언어입니다. 컴파일 후 Java 언어로 작성된 프로그램은 프로그램이 실행되는 시스템에 관계없이 Java 플랫폼의 일부인 바이트 코드 라는 중간 레벨 언어로 변환됩니다 . 이것은 자바 가상 머신 (JVM)이라고하는 인터프리터에 의해 모든 머신에서 바이트 코드를 실행할 수 있기 때문에 자바를 이식성이 뛰어나므로 자바는 '코드 재사용 성'을 제공합니다.
    • Java는 객체 지향 프로그래밍 언어입니다. OOP를 사용하면 전체 프로그램을 여러 객체로 나눠서 더 간단하게 만들 수 있습니다. 객체는 하나의 기능에서 다른 기능으로 데이터 흐름을 갖도록 브리지로 사용될 수 있습니다. 우리는 프로그램의 요구 사항에 따라 데이터와 기능을 쉽게 수정할 수 있습니다.
    • Java는 강력한 언어입니다. Java 프로그램은 블루 레이 플레이어에서 내비게이션 시스템에 이르기까지 소비자 및 미션 크리티컬 애플리케이션 모두에서 사용되므로 신뢰할 수 있어야합니다.
    • Java는 다중 스레드 언어입니다. Java는 여러 스레드를 정의하여 한 번에 많은 작업을 수행 할 수 있습니다. 예를 들어 네트워크 연결에서 입력을 기다리는 동안 GUI (Graphical User Interface)를 관리하는 프로그램은 두 작업 모두에 기본 GUI 스레드를 사용하는 대신 다른 스레드를 사용하여 수행하고 대기합니다. 이렇게하면 GUI가 반응 적으로 유지됩니다.
    • Java 프로그램은 애플릿을 작성할 수 있습니다. 애플릿은 웹 브라우저에서 실행되는 프로그램입니다.
    • Java에는 전처리 기가 필요 하지 않습니다. Java 응용 프로그램을 만들기 위해 헤더 파일을 포함 할 필요가 없습니다.

따라서 Java는 매우 성공적인 언어이며 매일 인기를 얻고 있습니다.

시작을위한 중요 팁 및 링크

      1. 기본 이해 :
        모든 프로그래밍 언어의 기본을 배우는 것이 매우 중요합니다. 새로운 것을 배우기 시작하는 가장 좋은 방법입니다. 걱정하지 말고 언어에 대한 개념을 배우십시오. 환경에 친숙해지면 서서히 환경에 익숙해집니다. 다음은 시작할 수있는 몇 가지 링크입니다.

         

      2. 인내심이 핵심입니다.
        언어에 대한 자료의 양이 많기 때문에 Java를 배우는 것은 압도적이지만 인내심을 갖고 자신의 속도로 배우고 서두르지 마십시오. Java 마스터 링은 시간이 걸리는 프로세스입니다. 최고의 코더조차도 어느 시점에서 시작했을 것입니다. 따라서 큰 문제는 아닙니다. 가능한 한 많이하고 계속 진행하십시오. 당신의 시간을주세요. 인내가 성공의 열쇠입니다.
      3. 연습 코딩
        기본 사항을 이해하면 가장 좋은 방법은 정기적 인 연습으로 기술을 연마하는 것입니다. '지식은 사람을 완벽하게 만든다'고 말한 것처럼 진정한 지식은 배운 것을 구현할 때만옵니다. 따라서 읽는 것보다 더 많은 코드를 작성하십시오 . 자신감이 쌓일 것입니다. 완벽한 연습은 당신을 완벽하게 만듭니다.

      4. Java에 대해 정기적으로 읽기 Java
        의 다양한 주제에 대해 지속적으로 읽고 더 많은 정보를 탐색하십시오. 이것은 Java에 대한 관심을 유지하는 데 도움이됩니다.


      5. 그룹에서 연구
        그룹의 연구는 무언가를 배울 수있는 좋은 방법입니다. 이렇게하면 모든 사람이 아이디어를 제시하고 즉시 코딩 문제를 논의하고 해결할 수 있으므로 주제에 대한 새로운 사항을 알 수 있습니다. 자바를 배우고 자하는 사람들의 공통된 그룹에 대해 알아보십시오.
        교사로부터 도움을 받고 가능한 한 많은 Java 책을 읽으십시오. 시장에는 Java 학습에 도움이되는 많은 좋은 책들이 있습니다.

자바 설정

여기 에서 java를 다운로드 할 수 있습니다 . 여기에 다른 버전의 Java가 있습니다. 운영 체제와 호환되는 것을 선택하여 다운로드하십시오.

// A Java program to print GeeksforGeeks

public class GFG {

    public static void main(String args[])

    {

        System.out.println("GeeksforGeeks");

    }

}

728x90
728x90

여러개의 값을 담을때는

 

여러개의 int a , int b , int c가 아닌 

배열을 통해 같은 자료형의 배열을 만들어 값을 여러개 담을수있습니다.

 

그러나 하나의 자료형이아닌 

학생에대한 정보를 담은 배열을 만들려고하면

학생의 이름(문자열)

학생의 나이(정수)

학생의 학년(정수)

학생의 성적(문자)

 

등 한명의 학생에 대한 정보를 저장하기위해 4가지의 다른 type들이 필요한데

이럴때 배열이아닌 구조체를 이용합니다.

 

< 구조체 형식 >

struct 구조체이름 { 자료형 멤버이름; };

 

먼저 struct 키워드 뒤에 구조체 이름을 지정해주고 { } (중괄호) 안에 변수를 선언합니다. 이렇게 구조체 안에 들어있는 변수를 멤버라고 합니다. 그리고 구조체를 정의할 때 } (닫는 중괄호) 뒤에는 반드시 ; (세미콜론)을 붙여줍니다.

 

구조체(Structure)

 

구조체라는 것은 하나이상의 변수(포인터 변수와 배열 포함)를 묶어서 새로운 자료형을 정의하는 도구이다. 즉 구조체를 기반으로 우리는 새로운 자료형을 정의 할 수 있다.

자바를 먼저 배웠다면 이 구조체는 자바의 객체 사용방법과 흡사하다.

 

구조체를 정의 하는 방법은 아래와 같다.

ex)

struct person { // person이라는 이름의 구조체 정의

int num; // 정수 저장용 멤버

char str[30]; // 문자열 저장용 멤버

};

 

위에서 person이라는 이름의 자료형이 만들어졌다. 그렇다면 이제 이 자료형의 변수를 만들어 주어야한다.

ex)

struct person simson;

위의 예시를 보면 알겠지만 맨앞에 struct선언을 추가해야하며, 이어서 구조체의 이름과 구조체 변수의 이름을 선언 해야한다.

여기서 구조체 변수의 이름은 simson이다.

구조체 변수는 당연히 아래처럼 배열로도 선언이 가능하다.

ex)

struct person simson[2];

 

구조체 변수의 멤버에는 int형의 변수num과 char형의 배열 str이 존재하는데 이 둘을 사용 할 때에도 일반적인 방법과는 조금 다른다. 

ex)

simson.num

simson.str

 

이처럼 구조체 변수를 앞에 입력후 점(.)을 찍고 멤버 변수의 이름을 적어사용한다.

 

아래의 간단한 코드를 작성하여 보자

#include<stdio.h>

#pragma warning(disable:4996) // scanf 보안 경고 제거용

 

struct person {

int num;

char str[30];

};

 

int main(void) {

int i;

struct person simson[2];

for (i = 0; i < sizeof(simson)/sizeof(simson[1]); i++) {

printf("이름 입력: ");

scanf("%s",simson[i].str);

simson[i].num = i;

}

for (i = 0; i < sizeof(simson) / sizeof(simson[1]); i++){

printf("========\n%d 번째 이름: ", simson[i].num+1);

printf("%s \n", simson[i].str);

}

return 0;

}

 

 

 

여기서 sizeof(simson)/sizeof(simson[i])는 배열의 크기를 구할때 쓰인다.

728x90
728x90

컴퓨터 알고리즘에서 정렬은 기본개념이면서 누구나 알아야되는 기본상식입니다.

이러한 정렬방법에도 시간복잡도가 차이가 나는데요.

버블정렬 삽입정렬 퀵정렬  병합정렬 힙정렬 등 다양한 정렬이 존재합니다.

그 중 삽입정렬에 대해 알아보겠습니다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

1 10 5 8 7 6 4 3 2 9 라는 수들을 오름차순으로 정렬하시오

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

삽입정렬의 경우 위 문제에서 각 숫자를 적절한 위치에 삽입하는 방법으로

문제를 해결합니다. 여기서 애매한 표현은 '적절한 위치'인데요

 

for( int i=0; i<n; i++)

{

key = arr[i];

j = i-1;

 

while(j>=0 && arr[j] > key)

{

arr[j+1] = arr[j];

j--;

}

stt[j+1] = key;

}

삽입정렬(insertion sort)은 아직 정렬되지 않은 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해 가며 정렬하는 방식입니다.

삽입 정렬(insertion sort) 알고리즘 개념 요약
손안의 카드를 정렬하는 방법과 유사하다.
새로운 카드를 기존의 정렬된 카드 사이의 올바른 자리를 찾아 삽입한다.
새로 삽입될 카드의 수만큼 반복하게 되면 전체 카드가 정렬된다.
자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교 하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘
매 순서마다 해당 원소를 삽입할 수 있는 위치를 찾아 해당 위치에 넣는다.
삽입 정렬(insertion sort) 알고리즘의 구체적인 개념
삽입 정렬은 두 번째 자료부터 시작하여 그 앞(왼쪽)의 자료들과 비교하여 삽입할 위치를 지정한 후 자료를 뒤로 옮기고 지정한 자리에 자료를 삽입하여 정렬하는 알고리즘이다.
즉, 두 번째 자료는 첫 번째 자료, 세 번째 자료는 두 번째와 첫 번째 자료, 네 번째 자료는 세 번째, 두 번째, 첫 번째 자료와 비교한 후 자료가 삽입될 위치를 찾는다. 자료가 삽입될 위치를 찾았다면 그 위치에 자료를 삽입하기 위해 자료를 한 칸씩 뒤로 이동시킨다.
처음 Key 값은 두 번째 자료부터 시작한다.

 

 

 

 

정리. 

1. 정렬된 partial 어레이를 유지하며 한칸씩 늘려가며 정렬

2. 한칸 늘릴 때 새로 삽입된 데이터를 정렬된 어레이에서 맞는자리로 위치시킨다.

3. 탐색 범위 outer : 1 ->n      inner : j >=0 && arr[j] >key

 

728x90
728x90

대칭키 암호방식은 비밀키암호방식과 같은 의미이며

암호화과정에서 복호화키=암호화키 인 암호방식을 비밀키 암호방식이라 한다.

이과정에서 암호화와 복호화는 제3자에게 알려지면 안되는 비밀키를 이용하기때문에

대칭키암호방식을 비밀키암호방식이라고도 부른다.

 

 

 

동기식 스트림암호

> 키 스트림은 평문과 독립적으로 생성됩니다.

> 암,복호화가 상호 동기화가 필요합니다.

> 암호문의 1비트가 오류가 생기면 해당비트에만 영향을 줌 -> 중간 비트 변조기 검출이 어려움

 

비동기식 스트림암호

> 키 스트림 생성시 이전 평문,암호문에 종속되어 생성

> 암호화 복호화시 키스트림 생성의 동기화가 불필요

> 암호문1비트 오류가 생기면, 오류난 비트가 키 스트림에 머무는 동안 영향을 줌 -> 변조 검출이 비교적쉬움

 

 

 

728x90

+ Recent posts