1995년 자바의 아버지라고 불리는 제임스 고슬링과 그의 동료들에 의해 시작된 프로젝트이다. Java는 원래 가전제품을 제어하기 위한 언어로 고안되었지만 웹의 등장으로 엄청난 성공을 거두면서 주류 언어가 되었다.자세한 내용 : Java의 역사한국에서는 정부나 기업의 시
자바로 프로그램을 만들기 위해서는 아래와 같은 과정이 필요하다.코드 작성컴퓨터가 실행할 수 있는 형태로 코드를 컴파일컴파일된 프로그램을 실행Java SE(Java Platform, Standard Edition)는 자바의 표준안이다. 자바라는 언어가 어떠한 문법적인 구
따옴표가 없는 숫자는 숫자로 인식한다.자바는 문자(Character)와 문자열(String)을 구분한다.문자는 한 글자를 의미하고, 문자열은 여러 개의 문자가 결합한 것을 의미한다.문자는 ''(작은 따옴표)로 감싸야 한다.문자열은 ""(큰 따옴표)로 감싸야 한다.만약,
영어로는 Variable로 (문자나 숫자 같은) 데이터를 담는 컨테이너다. 여기에 담겨진 데이터는 다른 데이터로 바꿀 수 있다. 변수는 마치 자연어에서 대명사와 비슷한 역할을 한다.위는 변수 a를 지금부터 사용하겠다고 변수를 선언한 것이다. 변수 a 앞에는 int라는
주석(comment)은 로직에 대한 설명이나 코드를 비활성화 할 때 사용한다. 주석은 프로그래밍적으로 해석되지 않는다.// 사용/\*\*/ 사용세미콜론은 문장(statement)의 끝을 의미한다. 자바에서는 문장의 끝에 세미콜론을 사용하지 않으면 컴파일 에러가 발생한다
양 쪽의 값이 같다는 것을 알아두면 된다.위의 표는 정수에 해당하는 데이터 타입의 리스트다.위의 변수에 담을 수 있는 숫자의 범위는 -128 ~ 127 이다. 이 범위 밖의 수인 -129나 128을 변수에 대입하려고 하면 오류가 발생할 것이다. 그럼 매우 큰 표현범위를
변수는 변하는 값을 의미한다. 변수와 대비되는 개념이 상수인데, 상수(常數, constant)란 변하지 않는 값을 의미한다. 아래의 코드 중에서 a는 변수이고, 1은 상수이다.1은 1이고, 3은 3이다. 고유한 값을 가지고 있고, 그 값을 변경할 수 없는 데이터 타입을
형 변환(Type Conversion)이란 데이터의 타입을 변경하는 것이다. 예를 들어 int 타입의 정수 200의 bit 값은 아래와 같다.프로그래밍을 처음 시작하는 사람도 컴퓨터는 모든 정보가 0과 1로 만들어진다는 이야기를 들어봤을 것이다. 여러분이 200이라는
연산자(operator)란 특정한 작업을 하기 위해 사용하는 기호를 의미한다. 작업의 종류에 따라서 대입 연산자, 산술 연산자, 비교 연산자, 논리 연산자 등이 있다. 이번 수업에서는 가장 기초적인 연산자에 대해서 알아보고, 여기서 다루지 않는 연산자들은 각 연산자가
Boolean은 참과 거짓을 의미하는 데이터 타입으로 bool이라고도 부른다. 불린은 정수나 문자와 같이 하나의 데이터 타입인데, 참을 의미하는 true와 거짓을 의미하는 false 두 가지의 값을 가지고 있다. 아래는 비교 연산자들에 대한 설명이다.프로그래밍에서 비교
조건문이란, 주어진 조건에 따라서 애플리케이션을 다르게 동작하도록 하는 것으로 프로그래밍의 핵심 중의 하나라고 할 수 있다.조건문은 "if"로 시작한다. 아래 코드를 보자. if 뒤의 괄호를 if절이라고 부르고, 중괄호가 감싸고 있는 구간을 then 절이라고 부르겠다.
"11 .조건문"에서 Boolean에 따라 프로그램이 다르게 동작하도록 하는 방법을 배웠다. 이번 시간에는 Boolean의 값을 결합해서 코드를 좀 더 간결하게 만들 수 있는 논리 연산자(Conditional Operator)에 대해서 알아보자.&& (and)는 좌항과
인간은 반복적인 작업을 잘하지 못한다. 실수하고, 지루해한다. 컴퓨터는 이런 반복적인 작업을 대행하기 위해서 만들어진 기계다. 인간이 하기 싫어하는 바로 그 일을 컴퓨터가 대신하도록 하는 것이 반복문(loop, iteration)이다.만약, "Hello Java"라는
배열(Array)은 연관된 정보를 그룹핑 하는데 사용한다.배열은 자료들을 모아놓는 자료구조의 일종으로 동일한 자료형을 순차적으로 관리하는 기능을 한다.변수에 상수를 대입하는 것과 변수에 배열을 대입하는 것의 차이를 학급의 예를 들어서 생각해보자. 1반에는 50명의 학생
메소드(method)란, 특정 기능을 정의한 코드들의 집합이라고 생각하면 된다.불필요한 중복되어 사용하는 코드를 메소드로 정의하고 호출함으로써 가독성을 높일 수 있다.코드에 문제 생길 때 문제가 되는 메소드만 수정하면 됨으로써 유지보수에 도움이 된다.우리는 이미 메소드
"15. 메소드"에서 입력과 출력에 대해서 알아봤다. 이를 통해 메소드가 좀 더 쓸모있는 것이 될 수 있다는 것도 알게 되었을 것이다. 그럼 자바 애플리케이션도 입력과 출력을 할 수 있을까?물론이다. 예를 들어 사용자의 키보드, 마우스, 터치를 입력으로 받아들일 수 있
객체 지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다. 이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그
객체를 만들기 전에 이미 익숙한 코드로 돌아가보자. 아래 예제는 간단한 더하기 프로그램이이다. 그런데 이 예제를 잘 활용하기 위해서 상상력이 필요하다. 아주 간단한 예제지만 상당히 복잡한 작업을 실행하고 있는 로직이라고 가정하자.실행 결과는 30과 60이다. 프로그래밍
맴버(member)는 영어로 구성원이라는 뜻이다. 객체도 구성원이 있는데 아래와 같다.변수메소드객체를 만들기 위해서 우선 클래스를 정의하고, 클래스에 대한 인스턴스를 만들었다. "18. 클래스와 인스턴스 그리고 객체"에서 살펴봤던 예제 CalculatorDemo에서 l
변수와 메소드 등을 사용할 수 있는 것은 이름이 있기 때문이다. 아래 코드에서 left는 변수의 이름이고, sum은 메소드의 이름이다.프로그램이 커지면 여러 가지 이유로 이름이 충돌하게 된다. 이를 해결하기 위해서 고안된 것이 유효범위라는 개념이다. 흔히 스코프(Sco
회사에 출근해서 업무를 시작하기 전에 제일 먼저 하는 일이 아마 책상 정리일 것이다. 커피를 내리는 경우도 있을 것이고, 컴퓨터 부팅을 시작하기도 할 것이다. 즉 어떤 일을 시작하기 전에 준비를 하게 되는데 이것을 다른 말로 초기화라고 한다. 객체 지향 프로그래밍도 초
객체지향을 통해서 달성하고자 하는 목표 중에서 가장 중요한 것은 재활용성일 것이다. 상속은 객체지향의 재활용성을 극대화시킨 프로그래밍 기법이라고 할 수 있다. 동시에 객체지향을 복잡하게 하는 주요 원인이라고도 할 수 있다.상속(Inheritance)이란 물려준다는 의미
편리함을 위해서 어떠한 기능을 수용하면 그 기능이 기존의 체계와 관계하면서 다양한 문제를 발생시킨다. 그 문제를 한마디로 줄여서 말하면 복잡도의 증가라고 할 수 있다. 이번 시간에는 생성자가 상속을 만나면서 발생한 복잡성을 보여줄 생각이다. 그 맥락에서 super이라는
상속은 상위 클래스의 기능을 하위 클래스에게 물려주는 기능이다. 그렇다면 하위 클래스는 상위 클래스의 메소드를 주어진 그대로 사용해야 할까? 만약 그래야 한다면 제약이 상당할 것이다. 이런 제약을 벗어나려면 하위 클래스가 부모 클래스의 기본적인 동작 방법을 변경할 수
Calculator 예제로 돌아가보자. 계산기는 2개의 값(left, right)에 대한 연산(sum, avg) 만을 수행할 수 있다. 그런데 만약 3개의 값을 대상으로 연산을 해야 한다면 어떻게 해야할까? 우선 아래와 같이 입력값을 3개 받아야 할 것이다. 이를 위해
빈 디렉토리에 아래와 같이 코드를 작성한다. 아래 예제의 파일명은 ClasspathDemo.java 이다. 컴파일하면 두 개의 클래스 파일이 생성된다.ClasspathDemo.classItem.class즉 클래스 하나는 하나의 클래스 파일이 된다는 것을 알 수 있다.C
이전 시간에 클래스 패스를 배웠다. 클래스 패스란 컴퓨터의 저장 장치 어딘가에 존재하는 클래스 파일을 사용하기 위한 방법이다. 이번 시간에 살펴볼 패키지(Package)는 하나의 클래스 안에서 같은 이름의 클래스들을 사용하기 위한 방법이라고 할 수 있다.비유를 해보자.
아래 코드를 보자.지금까지 무수히 많은 예제에서 사용했던 코드다. 이것이 화면에 어떤 내용을 출력하는 것이라는 건 이미 알고 있다. 하지만 "도대체 우리가 정의한 적이 없는 이 명령은 무엇일까?"를 생각해볼 때가 왔다. 문법적으로 봤을 때 println은 메소드가 틀림
프로그래밍 도구의 기본적인 목표는 생각하는 것을 자유롭게 표현할 수 있도록 하는 것이다. 하지만 자유만으로는 부족하다. 프로그래밍은 작은 것에서 거대한 것, 단순한 것에서 복잡한 것, 단독 작업에서 협업으로 나아가게 된다. 이러한 변화를 수용하기 위해서는 다양한 규제를
1. abstract abstract란 한국어로는 추상으로 번역된다. 이에 대한 정의는 뒤에서 내리도록 하고 지금 단계에서는 abstract라는 것이 상속을 강제하는 일종의 규제라고 생각하자. 즉 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사
추상이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제다. 이 정도로 final의 용도를 기억해두고 코드를 보자.필드와 변수는 같은 의미라는 것 기억할 것이다. 실행되는 과정에서 한 번 값이 정해진 이후에는 변수 내의 값이 바뀌지 않도록하는 규제다.위의
인터페이스 (interface)는 다소 추상적인 개념이다. 인터페이스가 무엇인가를 철학적으로 논하려면 책 한권이 필요할지도 모르겠다. 하지만 우리는 철학 공부를 하는 것이 아니라 공학 공부를 하는 것이니 자바의 기능으로서 인터페이스를 받아들이면 되겠다.앞선 수업에서 인
이번 시간에는 다형성(Polymorphism)이라는 주제에 대해서 알아보자. 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유를 들어보겠다. 키보드의 키를 사용하는 방법은 '누른다'이다. 하지만 똑
객체 지향 이전까지가 프로그램을 동작하게 하는 법이라면 객체 지향은 웅장한 소프트웨어를 만들기 위한 방법이라고 할 수 있다. 그리고 필자는 이러한 지식을 성공하기 위한 지식이라고 부르고 싶다.지금부터 배울 것은 예외라는 것이다. 예외는 실패하지 않는 법에 대한 수업이다
API를 사용할 때 설계자의 의도에 따라서 예외를 반드시 처리해야 하는 경우가 있다. 아래의 예제를 보자.어려운 코드다. 하지만 지금의 맥락에서는 중요한 내용이 아니다. 그래서 예외와 관련되지 않은 부분에 대한 자세한 설명은 하지 않겠다. 그냥 out.txt 파일을 읽
지금까지 API의 소비자로서 API 측에서 던지는 예외를 처리하는 방법을 알아봤다. 이번에는 API의 생산자로서 소비자들에게 API를 제공하는 입장에 서보자. 전 시간에 사용했던 코드를 바탕으로 이야기를 풀어가자.위의 코드에서 예외가 발생한 이유는 10을 0으로 나누려
자바에서 상속이란 필수적이다. 여러분이 상속하건 하지 않았건 기본적인 상속을 하게 된다.위의 코드는 아래와 코드가 같다.자바에서 모든 클래스는 사실 Object를 암시적으로 상속받고 있는 것이다. 그런 점에서 Object는 모든 클래스의 조상이라고 할 수 있다. 그 이
상수는 변하지 않는 값이다. 아래에서 좌항이 변수이고 우항이 상수이다.아래와 같은 구문은 있을 수 없다. 1은 2가 될 수 없다.상수의 이런 특성을 이용해서 아래와 같은 로직을 작성할 수 있다.위와 같은 로직에서 숫자 1에 해당하는 과일은 언제나 사과여야 한다. 그러므
전자화된 시스템의 가장 중요한 특징은 복제다. 현실의 사물과 다르게 전자화된 시스템 위의 데이터를 복제하는데는 비용이 거의 들지 않는다. 바로 이러한 특징이 소프트웨어를 기존의 산업과 구분하는 가장 큰 특징일 것이다. 프로그래밍에서 복제가 무엇인가를 살펴보자.결과는 당
제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 말이 어렵다. 아래 그림을 보자.위의 그림은 아래의 코드를 간략화한 것이다.그림을 보자. p1.info와 p2.info의 데이터 타입은 결과적으로 아래와 같다.p1.inf
이전 시간에 배열에 대해서 공부했다. 배열은 연관된 데이터를 관리하기 위한 수단이었다. 그런데 배열에는 몇 가지 불편한 점이 있었는데 그 중의 하나가 한 번 정해진 배열의 크기를 변경할 수 없다는 점이다. 이러한 불편함을 컬렉션즈 프래임워크를 사용하면 줄어든다.아래의