java의 대해서 정리해 주세요 구채

java의 대해서 정리해 주세요 구채

작성일 2018.06.19댓글 2건
    게시물 수정 , 삭제는 로그인 필요

java의 대해서 정리해 주세요
구채적으로 정확하게요



profile_image 익명 작성일 -

자바(영어Java문화어: 쟈바)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다. 현재 버전 10까지 출시했다.

자바의 개발자들은 유닉스 기반의 배경을 가지고 있었기 때문에 문법적인 특성은 파스칼이 아닌 C++의 조상인 C 언어와 비슷하다.[1] 자바를 다른 컴파일언어와 구분 짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점이다. 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환한다. 바이트코드를 실행하기 위해서는 JVM(자바 가상 머신Java Virtual Machine)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다. 때문에 자바로 개발된 프로그램은 CPU나 운영 체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다.

역사[편집]

자바 언어는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링(James Gosling)이 만들었다. 이 언어는 원래 제임스 고슬링의 사무실 밖에 있던 오크 나무를 따다 오크(Oak), 혹은 그린(Green) 이라고도 불렀으나, 단어 리스트 중 무작위로 뽑은 자바(Java)를 선택했다. 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것이었다. 첫 공개 자바 버전은 1995년의 자바 1.0이었다. 한 번 쓰고 어느 곳에도 실행 "Write Once, Run Anywhere"하는 것을 약속하였고 인기 플랫폼에 무료 런타임을 제공하였다. 이 플랫폼은 꽤 안정성을 지녔고 보안 시스템은 여러 설정을 통해 네트워크 및 파일 접근을 통제할 수 있었다. 대부분의 브라우저들은 곧 자바 애플릿(Java Applet)을 웹 페이지 안에서 실행할 수 있었고 자바의 인기는 급상승했다. 자바 2(JDK 1.2 ~ 1.4)의 출현으로 여러 다양한 플랫폼에서 사용할 수 있는 설정(Configuration)들을 만들었다. 예를 들어 J2EE는 엔터프라이즈 애플리케이션을 실행할 수 있고, J2ME는 모바일 애플리케이션을 실행할 수 있다. J2SE는 스탠다드 에디션으로 지정되었다. 2006년에 마케팅용으로 Java EEJava MEJava SE 순서대로 명칭을 바꾸었다.

썬 마이크로시스템즈는 1997년 ISO/IEC JTC1 표준화 그룹, 그리고 나중에는 ECMA International 그룹과 접촉하여 정식 승인을 받으려 했으나 곧 이 프로세스에서 철수했다. 자바는 사실상 (de facto)의 표준이며 자바 커뮤니티 프로세스(Java Community Process)를 통해 관리되고 있다. 썬 마이크로시스템즈는 자바의 대부분을 무료로 배포하였으나 오픈이 아닌 사유 소프트웨어였다. 썬 마이크로시스템즈는 자바 엔터프라이즈 시스템 같은 특정 라이선스를 팔아서 수입을 올렸다. 썬(SUN) 사는 자사의 개발용(소프트웨어 개발 키트 (SDK))과 개발용의 일부인 실행용(자바 런타임 환경, JRE)을 구분한다. 실행용에는 컴파일러유틸리티 및 여러 개발용 헤더 파일이 포함되어 있지 않다.

2006년 11월 13일 썬 마이크로시스템즈는 대부분은 자바를 GPL 라이선스로 소스를 오픈하였으며 2007년 5월 8일 이 과정을 마쳤다. 썬 마이크로시스템즈가 권한을 가지고 있지 않은 대부분의 코어 부분을 오픈하였다. 2009년 4월 20일 제작사인 썬 마이크로시스템즈가 오라클과 인수 합병됨에 따라 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.

Duke 자바 마스코트

철학[편집]

자바 언어는 다음 5가지의 핵심 목표를 지니고 있다.[출처 필요]

  1. 객체 지향 방법론을 사용해야 한다.
  2. 같은 프로그램(바이트코드)이 여러 운영 체제(마이크로프로세서)에서 실행될 수 있어야 한다.
  3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.
  4. 원격 코드를 안전하게 실행할 수 있어야 한다.
  5. 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

자바는 초기 설계부터 객체 지향 언어(객체 지향 프로그래밍)로 설계되었다. C가 C++로 진화한 것과는 차이가 있다. 그리고 같은 코드로 어떤 마이크로프로세서에서나 실행되기를 원했다. 따라서 자바만의 실행 코드인 바이트코드라는 중간 코드를 컴파일러에 의해 생성한다. 그리고 자바 가상 머신(JVM)에 의해 해석되어 실행된다. 따라서 C/C++ 코드로 작성되어 생성된 코드보다 일대일 상황이면 실행 속도가 느리다. 그러나 장점은 같은 코드로 다양한 플랫폼이나 운영 체제에서 실행될 수 있다는 점이다.

자바 실행 코드 생성 및 마이크로프로세서와 관계[편집]

JVM 구조. 소스코드는 바이트코드로 컴파일되어 생성, 코드 검증, JVM에 의해 해석되어 실행(interpreted) 또는 JIT-compiled로 직접 기계어 코드로 변환 실행. JRE(Java Runtime Environment)에 API와 JVM이 함께 만들어짐.

자바가 여러 개의 마이크로프로세서(CPU)에서 같은 코드가 실행되기 위해서는 C/C++의 프로그램의 실행 구조와는 다른 방식이 필요하다. C/C++가 특정 CPU의 기계어 코드를 직접 생성하면, 이 기계어 코드가 메모리에 적체되어 바로 실행된다. 따라서 C/C++는 CPU가 달라지면 컴파일러가 달라져야 한다. 임베디드 프로그램의 경우, gcc는 gcc 소스를 사용해서 특정 CPU를 지정하고, 컴파일러(x86 플랫폼에서)로 크로스 컴파일러를 만들 수 있다. x86 리눅스용 프로그램 만든다면, x86 컴파일러를 만들 수 있다. ARM용 프로그램이라면 ARM을 지정하고 컴파일러 소스를 컴파일러(x86에서 실행되는)로 ARM용 크로스 컴파일러를 만들 수 있다. 만약 gcc를 사용하고 싶지 않거나 gcc 컴파일러가 없다면, 특정 CPU 개발 도구는 구입을 해서 사용한다. 그러나 자바는 같은 코드를 사용하여 다른 CPU에서 실행되도록 하기 위해 직접 CPU의 기계어 코드를 생성해서는 안 된다. 그 대신 자바는 바이트코드(Java bytecode)라는 것을 생성한다. 이것을 자바 가상 머신(JVM, Java virtual machine)이 해석을 하여 실행한다. 자바 가상 머신이 인터프리터가 되어 코드 해석 방식의 실행을 함으로써, 같은 바이트코드를 가지고 여러 가지의 CPU에서 실행이 가능해진다. JVM은 CPU와 직접적 관계가 있으므로 이것은 CPU의 기계어 코드로 이루어진다.

자바 실행 모델과 자바 바이트코드의 예[편집]

자바의 실행 방식은 스택 실행 방식 언어(stack-oriented programming language)를 생각할 수 있다.

int main(){  int a = 10;  int b = 20;  int c;   c = a + b;   printf("%d", c);   // 991}

이것을 C/C++를 x86 프로세서용 컴파일러로 컴파일하면, 컴파일러와 최적화 등에 따라 다를 수 있지만 다음과 같은 예의 코드가 생성될 수 있다. C 언어에서 실행할 때, 지역변수는 스택이나 CPU의 레지스터를 이용한다. 스택이냐 레지스터냐는 개발 도구의 옵션에서 설정하는 최적화와 함수 내의 변수의 숫자와 관련이 있다. 함수의 블록이 시작되면 레지스터를 스택에 대피시키고, EBP를 스택의 포인터 값으로 설정하여 변수의 베이스 주소로 사용한다. 스택을 이용한다면 다음과 같은 어셈블리 결과를 생각할 수 있다.

x86 프로세서에서 어셈블리어 코드 예는:

 mov eax, DWORD PTR 4[ebp] mov edx, DWORD PTR 8[ebp] add eax, edx mov DWORD PTR 12[ebp], eax

이 코드는 2개의 정수형 숫자를 더해 다른 곳에 넣는 과정이다. 메모리에 적체된 코드를 x86이 읽어 실행시킬 수 있는 기계어로 일대일 대응된다. bp 레지스터는 CPU의 스택을 베이스로 한 포인터 레지스터이다. 주로 지역변수로 선언된 경우 스택을 사용한다.

그러나 자바에서 보면:

0 iload_11 iload_22 iadd3 istore_3

2개의 숫자를 더하기 위해 스택에 넣고, 다시 스택에서 꺼내서 더한다. 더한 값을 다시 스택에 넣는다.

이 코드는 특정 CPU의 기계어 코드가 아니라, 자바 고유의 기계어로 생각할 수 있는 코드 형태이다. JVM이 읽어 해석한 후, 해당 코드의 기능을 수행한다.

버전[편집]

자바의 버전은 보통 Java SE 또는 JDK/JRE의 버전으로 말한다.

JDK(Java Development Kit)는 표준 라이브러리를 포함하며, JDK 버전이 바뀜에 따라 이 라이브러리가 확대되고 API가 바뀐다. 초기 1.0/1.1 버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 J2SDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭으로 돌아왔다. 또한 J2SE(Java2 Standard Edition)라는 명칭 또한 Java SE(Java Standard Edition)로 변경되었다. [2]

자바 버전 체계의 메이저 버전(소수점 위)이 계속 1.x로 고정되어 마이너 업데이트로 여기는 경우들이 있어 1.5 버전부터 5.0(1.5), 6(1.6)의 형태로 제품 버전을 코드 버전과 별개로 발표하고 있다.[3]

언어 자체는 자바 언어 명세(Java Language Specification, JLS)에서 정의되며, 판(edition)으로 구분한다. JDK가 확장되는 동안 언어는 2판에서 거의 변화가 없었으나, JDK 5와 함께 바뀐 JLS 3판에서 제네릭(generic) 타입, 애너테이션(annotation) 같은 기능이 도입되면서 상당히 바뀌었다.

JDK 7에서는 자바 언어에 상당한 변화가 계획되어 있었으나 JDK 7로 예정되었던 변화가 JDK 7과 JDK 8로 나뉘면서 JDK 7에는 상대적으로 사소한 언어 특성만이 추가되었다. 구체적으로 이진수 표기 추가, 가독성을 위해 수 표기에 밑줄(underscore)을 허용, 스위치 문(switch에서 문자열 사용, 제네릭 타입 객체 생성 시 타입 추론(type inference), 자동 자원 해제를 위한 try 문법, 여러 예외 타입을 동시에 잡도록 허용하는 문법 등이 추가되었다.

현재 자바 언어는 JLS 3판, JDK는 버전 9이다.

  • JLS 1판
  • JLS 2판
    • JDK 1.4: assertion 기능 추가
  • JLS 3판(JDK 5)


현재 오라클 공식 홈페이지에서 JDK 8, Java.net에서 JDK 9가 배포 중이며, 다운로드 페이지 오른쪽에 있는 약관 동의에 체크하고 그 아래 링크를 이용해 다운로드 받을 수 있다.

예제[편집]

Hello world[편집]

다음은 자바를 사용해 작성한 전통적인 Hello world 프로그램이다.

public class HelloWorldApp {  public static void main(String[] args) {    System.out.println("Hello World!"); // Hello World 를 출력  }}

소스 파일명은 반드시 파일 내의 public class 이름과 동일해야 하며, 파일 확장자는 .java이어야 한다. 예를 들면, 만약 public class 이름이 HelloWorldApp이라면, 파일명은 반드시 HelloWorldApp.java가 되어야 한다. 이 자바 파일이 동작하기 위해서는 자바 컴파일러를 통해서 바이트코드로 컴파일되어 같은 이름의 .class 파일, 즉, HelloWorldApp.class가 생성되어야 한다. 컴파일된 class 파일은 자바 가상 머신을 통해 실행이 가능하다.
리눅스/유닉스 터미널 (혹은 윈도 cmd) 에서 자바 파일을 컴파일한 후 실행하는 방법 예제)

  • 컴파일: 자바 컴파일러 사용 (예, javac)
javac HelloWorldApp.java

컴파일 후에는 같은 이름의 class 파일인 HelloWorldApp.class가 생성된다.

  • 실행: 자바 가상 머신 사용 (예, java)
java HelloWorldApp

실행 시에는 확장자인 .class를 붙이지 않는다.

  • 결과
Hello World!

자바 API[편집]

자바 파생응용 분야[편집]

함께 보기[편집]

profile_image 익명 작성일 -

JAVA는 원래 소프트웨어 구현된 컴퓨터입니다. 자바가상머신이라고 하지요. 그렇지만 일반적으로 언급되는 JAVA는 자바가상머신에서 작동하는 프로그램을 만들 때 사용되는 도구로 프로그래밍 언어입니다.

 

프로그램을 만드는 일인 프로그래밍을 하고자 하면, 프로그래밍을 체계적이고 전문적으로 배우세요. 대부분 JAVA같은 프로그래밍 언어를 배우는 것이 프로그래밍을 배우는 것이라 생각하는 데 매우 어리석고 잘못된 생각입니다. JAVA같은 프로그래밍 언어를 배운다고 프로그램을 만드는 일인 프로그래밍을 할 수 없습니다. JAVA같은 프로그래밍 언어를 배우는 것과 프로그래밍을 배우는 것은 별개 문제입니다.

 

프로그래밍이 무엇인지 간략하게 봅시다. 프로그램으로 만들고자 하는 것을 전산(컴퓨터) 분야에서는 문제라고합니다. 그리고 프로그램은 데이티와 명령어로 구성됩니다. 그래서 문제를 풀어 프로그램을 만들고자 한다면, 문제 관련 데이터들을 어떠한 기억장치에 어떻게 저장하고 어떻게 쓰고 읽을지를 결정하고(자료구조 설계), 어떠한 명령어들을 어떠한 순서로 몇 번씩 실행시킬지를 결정하여(알고리듬 설계), 이렇게 설계된 자료구조와 알고리듬을 C언어나 JAVA같은 프로그래밍 언어로 문법에 맞게 변환하여(구현) 프로그램을 만드는 일이 프로그래밍입니다.

 

요약하면, 프로그래밍은 컴퓨터를 이용한 문제 해결 과정입니다. 그래서 프로그래밍을 배울 때는 체계적이고 전문적으로 배워 4차 산업 혁명 하에 살아야 하는 사람이면 반드시 갖춰야 하는 능력인 창의적인 혹은 창조적인 문제 해결 능력과 프로그래밍 능력을 갖춰야 합니다.


이러한 데 프로그래밍할 때 사용되는 도구들인 C언어나 JAVA같은 프로그래밍 언어를 배운다고 저절로 창의적인 혹은 창조적인 문제 해결 능력과 프로그래밍 능력이 갖춰 지겠습니까? 그렇지 않습니다. C언어나 JAVA같은 프로그래밍 언어를 보다 쉽고 재미있게 효율적으로 배우고자 하면, 프로그래밍을 체계적이고 전문적으로 배우세요.


"이렇게 하면 나도 프로그램을 잘 만들 수 있다(나프잘)" 시리즈 책들을 참고해 보세요. 나이, 성별, 학력, 전공과 상관없이 누구나 독학으로 프로그래밍을 체계적이고 전문적으로 배워 창의적인 혹은 창조적인 문제 해결 능력과 프로그래밍 능력을 갖출 수 있습니다. 카페 "프로그래밍을 배우자"에서 공부하는 방법도 배우고 멘토링을 활용하면, 보다 재미있고 효율적으로 프로그래밍을 배울 수 있습니다.


컴퓨터 앞에 놓고, C언어나 JAVA같은 프로그래밍 언어, API 라이브러리, Visual Studio, NetBeans, Eclipse같은 언어 프로그램들 같은 개발 도구 사용법만을 가르쳐 남이 시키는 일만 남이 만든 코드를 편집하는 노가다를 양성하는 교육기관이면, 차라리 독학하세요. 충분히 할 수 있습니다. 그렇지 않고 컴퓨터 없이 문제를 풀어 개발 도구들로 프로그램을 만드는 방법을 가르쳐 프로그래머를 양성하는 교육기관이면, 스스로 문제를 풀어 프로그램을 만드는 일인 프로그래밍을 체계적이고 전문적으로 배워 창의적인 혹은 창조적인 문제 해결 능력을 갖출 수 있어 많은 도움이 될 것입니다. 왜냐하면, 개발 도구들로 하는 일인 프로그래밍이란 컴퓨터를 이용한 문제 해결 과정이기 때문입니다.

 

프로그래밍을 공부하는 데는 공부하는 방법이 매우 중요합니다. 공부하는 방법부터 배우고 시작해 보세요. 그렇지 않지만, 우리나라에서는 대부분 C언어부터 배우고 JAVA를 배우라고 해서(JAVA부터 배워도 됩니다) C언어나 JAVA를 배우다 보면, C언어나 JAVA 책에 적힌 내용은 그럭저럭 이해되지만, 장마다 제시되는 문제를 풀어 C언어나 JAVA로 프로그램을 만들고자 하면, 어떻게 해야 하는지 모르겠고, 잘되지 않습니다. 그러면 답지를 구해 코드만 외우고 넘어 갑니다. 망하는 지름길입니다.


C언어나 JAVA 책에 적힌 내용은 C언어나 JAVA의 문법이고, 장마다 제시되는 문제를 풀어 C언어나 JAVA로 프로그램을 만드는 일은 프로그래밍입니다. 따라서 C언어나 JAVA의 문법만 배운다고 프로그래밍을 할 수 있는 것은 아닙니다. 그래서 C언어나 JAVA의 문법을 배울 것인지 아니면 C언어나 JAVA로 하는 일인 프로그래밍을 배울 것인지를 먼저 명확하게 하세요. 공부하는 방법이 다르기 때문입니다. 공부하는 목표에 맞게 공부하는 방법을 배워 공부하면 보다 쉽고 재미있게 배울 수 있습니다.


공부하는 방법도 설명드려 보겠습니다. 참고해 보세요.


C언어나 JAVA를 보다 쉽고 재미있게 배우고, 스스로 문제를 풀어 C언어나 JAVA로 프로그램을 만들고자 한다면, 먼저 프로그래밍을 배우세요. 문제를 풀어 프로그램을 만드는 일인 프로그래밍을 먼저 체계적이고 전문적으로 배우세요. 그래서 창의적인 혹은 창조적인 문제 해결 능력을 갖추도록 하세요. 왜냐하면, C언어나 JAVA로 하는 일인 프로그래밍이란 컴퓨터를 이용한 문제 해결 과정이기 때문입니다.


위쪽 프로그래밍의 정의에 의하면, 먼저 문제를 풀어 알고리듬과 자료구조를 만드는 방법을 배우세요. 그리고 C언어나 JAVA로 알고리듬과 자료구조로 프로그램을 만드는 방법을 배우세요. C언어나 JAVA로 알고리듬과 자료구조로 프로그램을 만들 때 필요한 C언어나 JAVA의 문법적인 기능을 이제 C언어나 JAVA 책에서 찾아서 읽어 보고 적용하는 방식으로 공부하세요. 난이도를 높여 가면서 많은 문제를 풀어 프로그램을 만들다 보면, 스스로 문제를 풀어 프로그램을 만들 수 있고, C언어나 JAVA도 머리로 기억하는 것이 아니라 몸으로 기억되어 있을 것입니다. 그래서 숨쉬는 것처럼, 걷는 것처럼 자연스럽게 C언어나 JAVA로 프로그램도 만들 수 있을 것입니다.


알고리듬과 자료구조를 만드는 방법을 배우라고 해서 시중에 출간된 알고리듬과 자료구조 책들을 사서 이미 만들어져 책에 실린 정렬과 검색 알고리듬, 배열, 연결리스트, 트리, 그래프, 스택, 큐들을 외우지 마십시오. 정렬과 검색 알고리듬, 배열, 연결리스트, 트리, 그래프, 스택, 큐들을 만들 수 있도록 알고리듬과 자료구조를 만드는 방법을 먼저 배우라는 것입니다.


인터넷에서 사용되는 논리가 "C언어를 알아야 프로그램을 만들 수 있으므로 C언어를 먼저 배우라"고 합니다. 이러한 논리가 우리나라 영어 교육이나 학습에서도 적용되었지요.  우리나라 영어 교육이나 학습은 영어의 문법부터 시작합니다. 그렇게 해서 중학교, 고등학교 심지어 대학교까지 똑같은 방식으로, 영어 문법을 외우는 방식으로 공부하게 됩니다. 그렇게 십 수년을 하지만 헤밍웨이의 유명한 소설 책 한 권 제대로 읽지 못하고, 두 세쪽 되는 에세이 하나 제대로 작성하지 못하고, 지나가는 외국인과 담소한 번 제대로 나눌 수 없지 않습니까?


"C언어를 알아야만 프로그램을 만들 수 있다"는 논리라면, 영어의 문법을 공부했다면, 영어 소설책도, 에세이도 회화도 가능해야 하지 않습니까? 어느 분야에서 성공하려면, 10000시간 정도 분야에 집중하면 된다는 이론이 있지 않습니까? 우리나라에서 영어 공부에서는 적용되지 않는 이유는 무엇일까요? 교육과 학습에 문제가 있다는 것입니다.


그래서 요사이는 영어 교육과 학습이 매우 실용적으로 바뀌고 있습니다. 문법을 암기하는 것이 아니라, 듣기와 말하기로 바뀌고 있습니다. 듣기와 말하기할 때 필요하면 문법을 공부하고 적용하는 방식으로 말입니다. 그래서 좋은 결과를 내고 있습니다.


프로그래밍 교육과 학습도 바뀌어야 합니다. 문법위주 교육과 학습보다는 문제 해결 중심의 교육과 학습으로 바뀌어야 합니다. 프로그래밍을 공부하는 방법을 배우세요.


C언어나 JAVA언어같은 프로그래밍 언어와 프로그래밍을 체계적이고 전문적으로 공부하는 방법도 설명드려 보겠습니다. 참고해 보세요.


프로그래밍은 우리가 생활하는 데 있어 부닥치는 복잡한 문제를 새로운 생각으로 풀어 프로그래밍 언어로 컴퓨터가 처리하도록 하는 프로그램을 만들어 보다 편하게 살 수 있는 세상을 만드는 일입니다. 그래서 어렵습니다. 그렇지만 내가 생각한 프로그램을 만들고 세상 사람들이 사용한다면 엄청난 성취감과 자부심을 느낄 수 있습니다.


이러한 프로그래밍을 하고자 한다면 다음과 같은 최소한의 능력을 갖추어야 합니다.

(1) 문제 해결 능력

(2) 프로그래밍 언어 구사 능력

(3) 개발 툴 사용 능력


이 중에서 가장 중요한 것은 문제 해결 능력입니다. 문제를 해결할 수 없으면, 프로그래밍 언어 구사 능력도 개발 툴 사용 능력도 아무 소용이 없습니다. 문제 해결 능력은 많은 문제를 풀어 프로그램을 만들어 봄으로 해서 나만의 문제 해결 방법을 만들었을 때 갖추어 지는 것입니다. 따라서 프로그래밍을 배우고자 한다면 체계적이고 전문적인 학습을 해야 합니다. 그러면 누구나 프로그래밍을 할 수 있습니다.


프로그래밍 언어나 프로그래밍을 배울 때는 C언어나 자바같은 프로그래밍 언어만 배우지 마시고, C언어나 자바로 하는 일인 프로그래밍을 먼저 공부하세요. 프로그래밍 언어만 배운 사람이면 프로그래밍 언어가 배우기 어렵다고 하고, 어려운 프로그래밍 언어를 한 권 내지 두 세권 책으로 공부를 마친 후에도 문제를 스스로 풀어 배운 프로그래밍 언어로 프로그램을 만들려고 하면 어디서 부터 시작하여 어떻게 해야 하는지가 막막하다고 합니다.


왜 그럴까요? 프로그래밍 언어 책에 적힌 프로그램을 이해하기 위해서는 프로그래밍을 배워야 하는데 그렇지 않고 프로그래밍 언어를 배우고자 하기 때문입니다. 프로그래밍 자체는 어렵습니다. 프로그래밍은 문제를 풀어 컴퓨터가 처리하도록 하는 프로그램을 만드는 일이기 때문입니다.


프로그래밍 언어 책에서는 문제를 풀어 프로그램을 만드는 것을 설명하지 않고, 문제를 풀어 해결책(알고리듬)을 만든 후에 컴퓨터가 처리하도록 하는 프로그램을 만들 때 프로그래밍 언어가 언제, 어떻게 적용되는지만을 설명합니다. 그래서 프로그래밍과 프로그래밍 언어를 재미있게 공부하고자 한다면 체계적이고 합리적인 학습을 해야 합니다.


프로그래밍 언어를 배우기 전에 프로그래밍 언어로 하는 일인 프로그래밍을 먼저 공부하세요. 프로그래밍이 무엇인지, 어떻게 하는지, C언어같은 프로그래밍 언어가 언제, 어떻게 사용되는지 그리고 프로그램이 어떻게 작동하는지를 공부하세요. 또한 이러한 개념과 원리를 바탕으로 문제를 풀어 프로그램을 만드는 절차를 배우세요. 이러한 내용을 배우고자 하면, 다음 책들을 참고해 보세요.


책들은 "이렇게 하면 나도 프로그램을 잘 만들 수 있다(나프잘)" 시리즈입니다.


이렇게 프로그래밍을 이해했다면, 프로그래밍 언어를 배우세요. 무작정 프로그래밍 언어 책을 사고 동영상강의를 보면서 책에 적혀 있는 프로그램을 아무 생각없이 입력해서 실행시켜 보고 머리를 끄덕이고 외우는 방식보다 쉽게 재미있게 프로그래밍 언어를 배울 수 있습니다. 왜냐하면 왜 프로그래밍 언어를 배워야 하는지를 명확하게 이해했고, 프로그래밍 언어 책에 나온 프로그램이 어떻게 작성되었는지를 이해할 수 있고, 마지막으로 프로그래밍 언어 책에 제시되는 문제를 풀어 프로그램을 만들 수 있기 때문입니다.


C언어를 공부하고자 한다면 다음 책을 참고해 보세요.
책은 "C를 배우면 함수를 잘 만들어야 한다"입니다.


문법만 설명하는 것이 아니라 문제를 풀어 프로그램을 만들 때 C언어가 언제, 어떻게 적용되는지를 설명합니다. 특히 책의 처음부터 끝까지 C언어를 배우면 반드시 만들 수 있어야 하는 함수를 만들어서 사용하는 방법을 설명합니다.


카페 "프로그래밍을 배우자"에서 게시글과 동영상강의로 프로그래밍이 무엇인지, 어떻게 하는 것인지 그리고 C언어나 JAVA언어가 언제, 어떻게 사용되는지를 확인해 보세요. 그리고 프로그래밍과 C언어나 JAVA언어를 어떻게 배워야 할지를 생각해 보고 시작하세요. 그래서 시행착오를 줄이세요.


독학을 하신다면 책을 읽는 방법을 바꾸세요. 책을 볼 때 바로 정독을 하지 마시고, 빠른 속도로 전체 내용을 훓어 보는 방식으로 여러 번 보고, 정독을 하십시오. 왜냐하면 모든 내용은 질문자 님에게 새로운 내용입니다. 따라서 어려울 수 밖에 없습니다. 그래서 최소한 책에 어떠한 내용이 담겨 있는지와 자주 사용되는 용어(혹은 개념)에는 익숙해야 정독을 할 수 있지 않습니까? 책의 줄거리나 용어에 익숙하기 위해서 빠른 속도로 전체 내용을 훑어 보는 방식으로 먼저 읽어 보시라고 권하는 것입니다.


좋지 않은 프로그래밍 공부 방법이지만, C언어나 JAVA의 문법만 배우고자 한다면, 책을 훑어보기로 처음부터 끝까지 빠르게 3-4회 읽어 어떠한 내용인지, 자주 사용되는 용어들에 익숙해 지도록 하세요. 내용이 파악되고, 용어들에 익숙해지면, 처음부터 책에 실린 코드도 컴퓨터에 입력해 보면서, 컴퓨터가 없으면 공책에 적어 보면서 어떠한 문법이 언제, 어떻게 사용되는지를 외우세요. 이때는 "왜 이렇게 할까", "어떻게 작동할까"라는 생각들은 하지 마시고, 외우세요.

java의 대해서 정리해 주세요 구채

java의 대해서 정리해 주세요 구채적으로 정확하게요 자바(영어: Java, 문화어: 쟈바)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이...

java 코딩만 정리되어있는 책

java 코딩만 정리되어있는 책 기초지식은 알고있어서... 코딩만정리되어있는 책좀알려주세요 안녕하세요~ IT 취업... 공부하는 방법에 대해서 자세하게 알려드리도록 하겠습니다.

프로그래밍에 대해서 설명해주세요,c...

보통 모바일프로그래밍하면 java를 가장 먼저 떠올리는데요, java말고 c 나 c++로서의... 머리속에 정리가 되시는지 모르겠네요..말이 좀 횡설수설인거같은데..^^;; ASP...

JAVA/C++/C에 대해서.)

... 정정부탁해주세요..) 그런데 제가 이번에 목표가 여름방학때 아마추어게임제작... 정리하자면 1.c언어를 공부하지않고 java/c++을 공부해도 내용이해가 가능하고 언어를...

JAVA 의 자료형 차이점 가르쳐주세요...

C++(Visual-C++ 기준)와 java언어의 자료형의 차이점이 뭔가요? 좀 자세하게 가르쳐주세요~ 우선 기본형(primitive... (사람들이 보통 자바가 기본형에 대해서는 값에 의한...

java에서 환경변수 설정 후 같은 폴더...

... 어떻게 하면 되는지 알려주세요~ 제가 이번에 이해한... 언어에 대해서는 탄탄하게 기초를 다졌으면 한다. 클래스 이름과 패키지 갑돌이가 A.java 라는 자바...

javascript parent.location에 대해서...

... 자세히좀 알려주세요^_^ 감사합니다. // form을 만드시고 target을 _parent로... name="userId" value="<%=userid%>"/> [출처 [출처] form target 정리|작성자 신발물딸

그리고 java 공부법을 알려주세요!...

... 이젠 java를 보게 됬습니다 What the fuck 더욱더 멘붕이 옵니다 전혀 다른 언어들 ....... 부분에 대해서 어떻게 정리해놓았나 구글에 검색도 해보고 그렇게 해보세요. 책...

JAVA,CGI,XMLM,JAVA SCRFIPT, HTML...

... JAVA SCRFIPT, HTML, JSP, HPH 각각의 정의와 특징 동작과정에 대해서 알고싶어요 컴퓨터 도사님들 많이 갈쳐주세요... 잘 정리정돈하여 우리눈에 보여줍니다. 이과정에서 JS...