1.3 자바의 기본
자바 환경설정은 작성하지 않았습니다. 구글링하면 많이 나오니 참고해주세요
자바 개발환경이 준비가 되었다면 제대로 구축이 되었는지 확인하기 위해 프로그램 언어 세계에서는 관례가 된 "Hello World!"를 표시하는 애플리케이션을 만들고 실행했다.
하지만, 자바를 처음 공부하는 사람에겐 이 소스 코드가 무엇을 나타내는지, 어떻게 해서 'Hello World!'를 표시하는지가 궁금할 것이다. 그러므로 이 절에서는 자바 프로그래밍의 기본 문법을 학습하도록 한다.
자바에서는 소스 코드를 기술 할 때 유의해야 할 몇가지 규칙이 있다. 실제로 소스 코드를 읽거나 기술하기 전에는 최소한 알아두는 편이 좋은 자바 형식을 살펴보자.
자바 형식
자바 소스 코드는 주로 다음 3가지 요소로 기술한다.
- 자바에서 지정한 키워드
- 소스 코드 작성자가 직접 붙인 이름(식별자)
- 뭔가 역할을 가진 기홈(연산자 등)
자바에서 지정한 키워드를 예약어라고 한다.
예약언느 컴파일 시 프로그램을 분석하는 데 사용되는 단어 또는 true, false, null 등 이미 그 단어 자체에 프로그램 상의 의미가 있는 값을 나타낸다. 그러므로 예약어와 똑같은 단어는 식별자로 지정할 수 없다.
식별자란 소스 코드를 기술하는 사람이 붙인 이름을 말한다.
예를 들어 프로그램에서 'OO가 ☆☆를 ◇◇한다'와 같은 처리를 기술할 때 이들이 각각 무엇을 나타내는지 그리고 무엇을 하는지 등 그 의미를 사람이 읽고 이해할 수 있게 프로그램 언어에서 허용된 문자로 붙인 이름이다.
또한 계산과 조건 판정 등에 사용하는 기호를 연산자라고 한다. 따라서 기호는 _와 $를 제외하고 식별자로 사용할 수 없다.
키워드, 식별자, 연산자를 자바 문법에 따라 서로 연결해 자바의 문(statement)을 만든다.
다시 몇 개의 문을 모아 블록을 만들고 자바 애플리케이션을 만든다.
문과 블록
자바 소스 코드는 문과 복수의 문을 모은 블록으로 구성된다.
문에서는 단어나 기호를 조합해 값을 설정하거나 처리를 호출한다. 그리고 문의 맨 끝에는 세미콜론(;)을 붙인다.
블록은 복수의 문을 묶어 순서대로 배치함으로써 하나의 큰 처리 흐름이나 문의 영향 범위를 나타낸다.
{와 }로 에워싼 범위가 블록이다. 예를 들어 '사람'이라는 블록을 다음처럼 설정해보자.
- '이름'과 '취미'가 설정된 문
- '자기소개를 한다'와 '인사를 한다'를 나타내는 처리 블록
다음은 설정 예이다.
예제 1-1 블록과 문
----------------------------------------------------------------------------------------------------------------------------
사람 {
이름은 'OO';
취미는 'XX';
자기소개를 한다 {
인사를 한다;
이름을 말한다;
취미를 말한다;
}
인사를 한다 {
인사말은 '안녕하세요';
인사말을 한다;
}
}
----------------------------------------------------------------------------------------------------------------------------
블록 내의 문에는 각각 유효 범위가 설정되어 있다. 블록 내에서는 같은 계층 혹은 블록 밖에 있는 문이나 블록을 참조할 수 있지만, 블록 밖에서는 블록 내에 있는 문을 참조할 수 없다.
소스 코드 구조
자바의 소스 코드는 단순하게 보면 다음과 같은 구조로 기술한다.
- 소스 코드가 무엇을 나타내는지 선언
- 선언 블록 내에 값을 설정하기 위한 변수를 정의
- 선언 블록 내에 변수값을 사용한 처리를 기술
변수란 프로그램 안에서 값을 전달하기 위한 상자이다.
프로그램 안에서 계산을 하거나 가공한 값을 임시로 보관하는 데 사용한다. 변수 선언이나 처리를 기술하지 않아도 소스 코드는 성립하지만 우선은 이 3가지로 구성되는 것이 기본이다.
그리고 이번에 만든 '사람' 에제를 이 3가지 요소로 예를 들면 다음과 같다.
구성 요소 |
예제에서의 대상 |
소스 코드가 나타내는 것 선언 |
사람 |
변수(값을 가진 것)선언 |
이름, 취미, 인사말 |
처리를 기술 |
자기소개를 한다, 인사를 한다. |
클래스 선언
자바에서는 소스 코드로 나타내고자 하는 것이 무엇인지 블록으로 감싸서 선언한다.
구체적으로는 다음과 같은 것을 선언한다.
- 클래스
- 인터페이스
- 열거형
여기서는 이 중에서 가장 자주 사용하는 클래스를 만드는 방법을 설명한다.
클래스를 학습하고 나면 인터페이스와 열거형도 이해하기 쉬워진다.
클래스는 다음 구문으로 선언한다.
[구문] 클래스 선언
class 클래스명 {
... 클래스 내용 ...
}
클래스를 선언하는 블록에서는 class 키워드를 선두에 놓고 공백으로 구분한 뒤에 클래스명을 지정한다.
이렇게 선언된 class 블록 아래에 클래스가 사용할 변수나 처리를 기술함으로써 클래스의 성질과 동작을 연결시킬 수 있다.
좀 전에 예로 든 '사람'클래스에는 '이름'과 '취미'라는 변수가 있었고, 처리로는 '자기소개를 한다', '인사를 한다'라는 기능이 있었다.
변수 설정
자바 애플리케이션은 변수로 값을 유지한다.
변수에 값을 설정하려면 = 기호를 사용하며, = 기호 왼쪽에는 변수명을, 오른쪽에는 설정할 값을 쓴다.
이것을 대입(혹은 할당) 이라고 한다.
다음은 변수를 선언하는 구문이다.
[구문] 변수 선언(값을 대입하는 경우)
변수형 변수명 = 값;
변수형이란 그 변수에 어떤 값을 담을 수 있는지 나타내는 정보로, 수치, 무낮, 클래스 등을 지정할 수 있다. 변수에는 선언한 자료형의 값만 설정할 수 있다.
변수에 값을 설정한 다음에는 변수를 지정해서 값을 가져올 숭 ㅣㅆ다.
다음곽 ㅏㅌ이 값을 대입하지 않고 변수를 선언할 수도 있다.
[구문]변수 선언 (값을 대입하지 않는 경우)
변수형 변수명;
이 경우 변수형의 기본값(아무것도 설정하지 않으면 자동으로 설정되는 정해진 값)이 대입된다.
좀 전에 만든 클래스를 에로 들면 '이름'과 '취미'에는 문자열을 설정하므로 자바의 문자열 클래스인 String으로 형을 지정한다.
문자열 값을 나타내려면 값의 앞뒤를 큰 따옴표(")로 에워싸야 한다.
위 설명을 바탕으로 '이름' 변수를 다음과 같이 선언할 수 있다.
예제 1-2 '이름' 변수 설정
----------------------------------------------------------------------------------------------------------------------------
String 이름 = "?";
----------------------------------------------------------------------------------------------------------------------------
변수형은 처음에 변수명을 선언할 때만 지정하면 되고, 값을 변경할 때는 다음처럼 쓸 수 있다.
[구문] 변수의 값 변경
변수명 = 값;
값 부분에 계산식 등 어떤 처리를 넣은 경우 변수에는 처리 결과가 값으로 설정된다. 예를 들어 1 + 1의 계산 결과를 대입하고 싶을 때는 다음과 같이 기술한다. 변수형은 수치형 중 하나인 int로 한다.
예제 1-3 계산 결과를 수치형 int에 저장한다.
----------------------------------------------------------------------------------------------------------------------------
int 계산_결과 = 1+ 1;
----------------------------------------------------------------------------------------------------------------------------
지금까지 이해한 내용을 다시 '사람'클래스로 표현하면 다음을 문자열 변수로 지정할 수 있다.
- 이름
- 취미
- '인사를 한다' 안에 있는 인사말
이 문자열 변수를 자바 문법에 맞게 다시 쓰면 다음과 같이 된다.
class 사람 {
String 이름 = "?";
String 취미 = "?";
자기소개를 한다 {
인사를 한다;
이름을 말한다;
취미를 말한다;
}
인사를 한다 {
String 인사말 = "안녕하세요?";
인사말을 한다;
}
}
예제에서 '이름'과 '취미'는 클래스의 상태를 나타내는 변수이다.
이처럼 클래스의 블록에서 직접 선언한 변수를 필드(field)라고 한다.
메서드 기술
자바 애플리케이션에서는 어떤 처리가 포함된다. 처리에는 1+1처럼 처리를 나타내는 기호를 사용해 표현하는 식(expression)과 몇 개의 처리를 묶은 메서드(method)가 있다.
위 예제를 바꾸면 다음과 같다.
class 사람 {
String 이름 = "";
String 취미 = "";
void 자기소개를 한다() {
인사를 한다;
System.out.println(이름);
System.out.println(취미);
}
void 인사를 한다() {
String 인삿말 = "";
System.out.println(인삿말);
}
}
여기서는 '~를 한다'는 처리를 화면에 문자열을 출력하는 System.out.println으로 바꿨다. 지금 단계에서는 System.out.prntln을 문자열을 출력하는 명령이라고만 기억하자.
가변 길이 인수
자료형이 같은 인수가 여러 개 이어질 경우 인수형 뒤에 '...'을 붙임ㅇ로써 0 ~ 복수 개의 인수를 지정할 수 있다. 이거을 가변 길이 인수라 하며, 다음과 같이 기술한다.
[구문] 가변 길이 인수
반환형 메서드명(인수형 ... 인수명) {
.... 임의의 처리 ....
}
이때 전달받은 인수는 같은 형의 값을 하나로 묶은 배열로 다루어진다. 이 메서드를 호출하는 쪽은 몇 개라도 같은 형의 값을 가변 길이 인수에 담아 넘길 수 있게 된다. 값은 쉼표로 구분해 표현한다. 물론 값을 넘기지 않는 것도 가능하다.
그럼 다시 좀 전의 예제에 생성자를 추가해서 인스턴스 생성 시 '이름'과 '취미'를 설정할 수 있게 해보자.
생성자를 기술하기 전에는 인스턴스를 몇 개를 만들더라도 모두 같은 '이름'과 '취미' 값만 가질 수 있었지만. 생성자를 추가함으로써 인스턴스마다 이름과 취미를 따로 설정할 수 있게 된다.
class 사람 {
String 이름 = "";
String 취미 = "";
(new 키워드로 인스턴스 생성)
사람(String 이름, String 취미) {
this.이름 = 이름;
this.취미 = 취미;
}
(new 사람 ("혜린", "음악 감상"))
void 자기소개를 한다(){
인사를 한다;
System.out.println(이름);
System.out.println(취미);
}
void 인사를 한다(){
String 인사말 = "안녕하세요";
System.out.println(인사말);
}
}
여기서는 같은 사람 클래스에서 다음처럼 다른 인스턴스를 생성했다.
- 이름이 '혜린'이고 취미가 '음악 감상'인 사람 인스턴스
- 이름이 '도준'이고 취미가 '축구'인 사람 인스턴스
'프로그래밍 > JAVA' 카테고리의 다른 글
1.3.3 접근제한자 (0) | 2019.01.22 |
---|---|
1.3.2 패키지 (0) | 2019.01.22 |
1.1.3 자바 애플리케이션 작성 (0) | 2019.01.22 |
1.1.2 왜 자바일까? (0) | 2019.01.22 |
1장 자바 기초 지식 (0) | 2019.01.22 |