[JAVA] JAVA 기본 문법

2022. 5. 7. 10:53·방통대 컴퓨터과학과/3학년1학기
반응형

 

Java 프로그램 작성법

  • Java 언어는 객체지향 프로그래밍 언어이기 때문에 클래스를 기반으로 프로그램이 구성된다.
  • mian() 메서드를 포함하는 클래스가 프로그램 실행을 위한 기본 클래스가 되고, main() 메서드부터 실행이 시작된다.
  • 하나의 소스 파일로 작성된 경우에는 그 소스 파일을 컴파일하고 실행시킨다.
  • 여러 개의 소스 파일로 작성된 경우에는 각각을 컴파일한 다음 main() 함수가 들어 있는 소스 파일을 실행시킨다.
  • Java 프로그램의 소스 파일 이름은 'public 클래스'의 이름과 같아야 한다.
반응형

기본 사항

주석(comments)

  • 주석은 프로그램 작성자가 붙인 프로그램의 설명문을 뜻하며 프로그램의 가독성과 이해도를 높이기 위한 방법으로 사용된다.
  • 한 줄 주석 : //
  • 여러 줄 주석 : /* ... */, /** ... */ 
    • 이 중에 /** ... */ 이 주석은 소스 코드 가장 앞부분에 사용하는데 'javadoc'이라는 프로그램을 이용하여 소스 코드에 대한 매뉴얼을 자동으로 생성하고자 할 때 사용된다.

식별자(identifier)

  • 클래스, 변수(필드) 또는 메서드의 이름을 식별자라고 한다.
  • 식별자 규칙
    • 대소문자 구분
    • 길이 제한 없음. 하지만 너무 긴 식별자를 사용할 경우 프로그램의 가독성을 해친다.
    • 영어 대소문자, 한글, 숫자, 언더스코어(_), 달러($) 문자 등을 사용할 수 있으나 숫자로는 시작할 수 없다.
    • 변수나 필드 식별자의 경우에는 자료형을 표시하기 위해 접두어를 붙이기도 한다. → 헝가리안 표기법
    • Java에서 미리 정한 예약어(키워드)는 식별자로 사용할 수 없다.
    • 일반적으로 단어의 첫 글자는 대문자로, 나머지는 소문자로 작성한다.
    • 여러 개의 복합 단어를 사용할 경우 각 단어의 첫 글자를 대문자로 하고 나머지 글자는 소문자로 한다.
    • 클래스 이름의 첫 글자는 대문자, 필드와 변수 및 메서드 이름의 첫 글자는 소문자

리터럴(literal)

  • 변수나 필드에 지정할 수 있는 각 자료형의 실제값을 리터럴이라 한다.
반응형

 

자료형

  • 변수, 필드나 메서드 등은 정해진 자료형(data type)으로 선언되며 자료형에 따라 변수나 필드의 경우에는 저장될 수 있는 값, 메서드의 경우에는 리턴할 수 있는 값의 종류 및 적용 가능한 연산이 결정된다.
  • 자료형
    • 기본형(primitive type) : 정해진 자료형의 값 자체
    • 참조형(reference type) : C의 포인터와 같이 실제값이 저장된 메모리 주소 이용

기본형

정수형

  • byte, short, int, long은 각각 1byte, 2byte, 4byte, 8byte를 차지한다.

실수형

  • 소수점이 있는 숫자를 저장한다.
  • float 타입의 길이는 4byte, double 타입의 길이는 8byte이다.
  • 실수형 리터럴에는 특별한 의미를 갖는 리터럴로 POSITIVE_INFINITY(양의 무한대), NEGATIVE_INFINITY(음의 무한대), NaN(Not a Number) 등이 있다.
  • 실수형 리터럴을 직접 사용할 경우 double형 리터럴로 간주하기 때문에 주의가 필요하다.
    • ex) float f = 5.0f;   // f를 붙여서 써야 함.
           double d = 5.0; // 리터럴만 작성해도 에러 안남

문자형

  • 1개의 문자를 표현하며, 단일 따옴표를 사용한다.
  • 문자형에는 2byte 길이의 char형이 있다.
  • 문자 코드로는 ASCII가 아닌 2byte 길이인 UNICODE를 사용한다.
  • char형은 정수형과 호환이된다. char형은 부호 없는 정수로 취급되며 표현 범위가 0~65536이다.

논리형

  • 1byte 길이의 boolean형
  • 논리형은 참 또는 거짓을 표현하기 위한 자료형이다.
  • 리터럴은 true, false 두 개 밖에 없다.
  • Java에서는 오직 boolean형만이 참 또는 거짓을 표현할 수 있다.

참조형

  • 기본형을 제외한 모든 자료형을 참조형이라 한다.
  • 참조값(주소)을 가지는 자료형이며 참조형 변수는 저장 공간에 참조값을 저장한다. 즉 실제 데이터는 별도의 공간에 저장되어 있고 주소를 통해 그 안에 담긴 값을 가져온다.

자료형의 변환(형변환: type conversion)

  • Java의 특징 중 하나인 엄격한 자료형 검사는 값과 자료형이 일치하지 않을 경우에 오류가 발생하거나 형변환이 일어난다.
  • 크기가 작은 타입에서 큰 타입으로는 자동으로 형변환한다.
    • byte → short → int → long → float → double
  • 크기가 큰 타입에서 작은 타입으로 자동 형변환이 안 되는 이유는 자료의 손실이 일어날 수 있기 때문이다.
// 묵시적 형변환
float f = 5.0f;
double d = f;
  • 묵시적 형변환은 컴파일 시 컴파일러가 알아서 처리해주는 자동 형변환이다.
  • 프로그래머가 강제로 형변환을 명시하는 건 '명시적 형변환'이라 한다.
//명시적 형변환
int a = 3;
float f = (float)a;
double d;
f = (float)d;
  • '(자료형)' 형태의 형변환 연산자를 사용하면 강제적인 형변환이 일어나고, 컴파일러가 오류를 발생시키지 않는다.
  • 다만 자료의 손실이 발생할 수 있는 경우가 있으니 주의해야 한다.
반응형

 

변수와 상수

  • 변수(variable) : 값이 계속 변경될 수 있는 변수
  • 상수(constant) : 값이 변하지 않는 특별한 변수

상수의 선언 및 사용

  • 상수는 리터럴 자체로 사용하거나 'final' 키워드를 이용해 정의한다.
final int nConst = 3;
반응형

 

연산자

산술 연산자

  • 이항 연산자
    • a+b, a-b, a*b, a/b, a&b
    • %는 모듈로(modulo) 연산자라고 하며 a를 b로 나눈 나머지를 구한다.
  • 단항 연산자
    • +a : 부호 바꾸지 않음
    • -a : 부호 반대로 바꿈
    • b = ++a : a 값을 1 증가시키고 그 결과를 b에 저장
    • b = --a : a 값을 1 감소시키고 그 결과를 b에 저장
    • b = a++ : a 값을 b에 저장하고 a 값을 1 증가시킴
    • b = a-- : a 값을 b에 저장하고 a 값을 1 감소시킴

비교 연산자(관계 연산자)

  • 두 개의 피연산자를 다양하게 비교하기 위한 연산자
  • 대소 비교의 경우는 숫자 자료형을 가진 피연산자에게만 적용
  • 동등 비교의 경우에는 어떠한 자료형이든 가능하다.
  • instanceof 연산자는 참조 자료형인 경우에만 적용 가능

논리 연산자(조건 연산자)

  • boolean형의 값을 가질 수 있는 자료형에 대해서만 적용 가능함
  • a && b : a와 b가 둘 다 true일 때만 ture이고 그 외에는 false. 만일 a가 false이면 b를 참조하지 않는다. → b가 ture이던 false이던 a가 false면 무조건 false이기 때문에
  • a || b : a와 b가 동시에 false일 때만 false이고 그 외에는 true. 만일 a가 true이면 b를 참조하지 않는다.
  • a & b : a와 b가 동시에 true일 때만 true이고 그 외에는 false이다. 항상 a와 b를 참조한다.
  • a | b : a와 b가 동시에 false일 때만 false이고 그 외에는 true이다. 항상 a와 b를 참조한다.
  • a ^ b : a와 b가 다르면 true, 같으면 false이다.
  • !a : a가 true이면 false, false이면 ture
  • a = b ? c : d :b가 true이면 a에 c를 대입하고, b가 false이면 a에 d를 대입
반응형

 

제어문

  • 명령문 : 연산을  하거나 실행 순서를 제어하기 위한 문장

블록

  • 하나 이상의 명령문이나 변수 선언문, 클래스 정의, 메서드 정의 등 중괄호({})로 묶어 놓은 것을 블록(block)이라 한다.
  • 블록은 중첩이 가능하고 중첩 깊이의 제한은 없다.

레이블

  • 명령문이나 블록 앞에는 레이블(lable)을 붙일 수 있다.
  • 레이블의 이름은 식별자로서 변수 이름처럼 정의하면 된다.
  • 레이블이 붙은 블록 내부에서는 break문이나 continue문을 이용하여 블록을 빠져나갈 수 있다.
  • 변수 선언문이나 클래스 선언문에는 레이블을 붙일 수 없다.
레이블 이름 : 명령문 블록
레이블 이름 : 블록

명령행 매개변수 사용하기

  • 명령행 매개변수 : 프로그램을 실행시킬 때 프로그램 이름 뒤에 나열하는 매개변수
c:\>java TestJava Kim 30
  • 위의 예제에서는 'Kim'과 '30'이 명령행 매개변수이다.
  • 이 명령형 매개변수는 main() 메서드의 괄호 안에 있는 args[]로 전달된다.
// 클래스 생략
public static void main(String args[]) {
	System.out.println(args[0]); // Kim
}

if-else문

  • if-else문은 주어진 조건에 따라 명령문을 분기하는 역할을 한다.
  • if 뒤에 주어지는 조건이 true일 경우 if 블록으로 분기, false일 경우 else 블록으로 분기
int a = 5;
if(a > 10) {
	System.out.println("a는 10보다 크다.");
} else if(a < 3) {
	System.out.println("a는 3보다 작다.");
} else {
	System.out.println("a는 10보다 같거나 작고 3보다 같거나 크다.");
}

switch문

  • if-else문처럼 명령문을 분기하는 역할을 한다.
  • 다중 선택 구조이며 case 조건은 정수(long 제외)와 호환되거나 String 값을 줘야 한다.
  • 각 case마다 끝에는 break문을 사용해야 한다. break를 의도적으로 사용하지 않는 경우도 있는데 break가 없을 경우 조건에 맞는 case부터 break를 만나거나 switch가 종료되기 전까지의 코드가 모두 실행된다.
int n = 15;

switch(n) {
	
    case 10 : 
    	System.out.println("10");
        break;
    case 20 : 
    	System.out.println("20");
        break;
    case 30 :
    	System.out.println("30");
        break;
    default :
    	System.out.println("숫자");
        break;
}

 

반복문

  • 주어진 조건이 true일 경우 블록으로 묶인 명령어를 반복해서 실행
  • for, while, do-while문

for문

for(초기화식; 탈출 조건; 반복식) 명령문

// 초기화식은 오직 한번만 실행
// 초기화식에 있는 변수가 반복식을 수행하면서 탈출 조건이 될때까지 계속 반복적으로 실행된다.

// 1부터 10까지 반복문을 사용해 더하는 코드
int nSum = 0;
for(int i = 1; i <= 10; i++) {
	nSum += i;
}

for-each 구문(JDK 1.5X 이상 버전에서만 지원)

  • for문을 좀 더 간단하게 변형
// arr의 값을 element라는 변수에 담아 출력하는 반복문

int[] arr = { 3, 10, 5, 6, 1 };

for(int element : arr) {
	System.out.println(element);
}

while문

while(탈출 조건) 명령문

// for문과 똑같이 1에서부터 10까지의 정수 합을 구하는 프로그램
int nSum = 0;
int i = 1;
while(i <= 10) {
	
    nSum += i;
    i++;
}

break문

  • 반복문을 강제로 빠져나갈 때 사용
  • break를 만나면 바로 반복문이 종료되고 그다음 명령문으로 이동한다.
  • 반복문 외 일반적으로 블록을 빠져나갈 때에도 사용된다. 하지만 이런 경우에는 블록에 레이블을 지정해야 하고, break문 뒤에 빠져나가고자 하는 현재 블록의 레이블을 붙여주어야 함.

continue문

  • continue문을 만나면 이후 명령문을 무시하고 루프의 처음으로 돌아간다.
  • 레이블과 함께 사용할 수 있지만 continue문은 레이블과 상관없이 항상 반복문 내에 포함되어 있어야 한다.
반응형

 

변수의 종류와 유효범위

  • 변수 종류
    • 객체가 소유하는 non-static 필드
    • 클래스에 속한 객체들이 공유하는 클래스 변수(static 필드)
    • 메서드나 블록에서 정의된 지역 변수
    • 메서드의 매개변수(인자 또는 파라미터)
  • 필드는 원칙적으로 객체가 선언된 블록에서 객체와 함께 사용될 수 있다.
  • 클래스 변수는 클래스를 참조할 수 있는 블록에서 사용될 수 있다.
  • Java의 모든 변수는 사용범위가 일정한 구역으로 제한되어 있는데 그러한 구역을 변수의 유효범위라고 함
  • 지역 변수의 경우 지역 변수를 선언한 블록 내에서만 사용이 가능하다.
  • 전역 변수의 경우 해당 소스 파일 내, 어디든지 사용이 가능하다.
반응형

 

배열

  • 같은 자료형의 데이터를 연속적으로 모아 놓은 자료구조
  • 배열에 속한 하나의 데이터를 원소 또는 컴포넌트라고 한다.
  • Java에서 배열은 참조형으로 분류된다.
  • 숫자 인덱스(첨자)를 사용하여 특정 원소를 다룬다.

배열의 선언

  • 규칙
    • 배열은 선언한 뒤 초기화나 생성의 과정을 거쳐야만 사용할 수 있다.
    • 배열을 선언할 때 배열의 크기를 지정할 수 없다.  ex)int a[10]; 오류
    • 다차원 배열은 255차원까지 선언할 수 있다.
//1차원 배열의 선언
int arr1[];
int arr2;
int arr3[10]; // 오류
arr1[0] = 1; // 오류, 초기화나 생성 전에 배열 사용 못함

//2차원 배열 선언
int arr4[][];
int[][] arr5;
int[] arr6[]; // 오류는 안나지만 썩 좋은 표현은 아님

배열의 초기화 및 생성

  • 배열의 초기화 : 배열을 선언하고 초기값을 지정하는 것
  • 배열의 생성 : 배열이 사용할 메모리 공간을 확보하는 것
  • 배열을 초기화시키면 자동으로 메모리 영역을 할당받게 된다.

배열의 초기화

// 1차원 배열의 초기화
int arr1[] = {1, 2, 3, 4, 5};
int[] arr2 = {1, 2, 3, 4, 5};

// 2차원 배열의 초기화
int arr3[][] = {{1, 2, 3}, {4, 5, 6}};
int[][] arr4 = {{1, 2, 3}, {4, 5, 6}};

int arr5[];
arr5 = {1, 2, 3, 4, 5}; // 오류, 선언과 동시에 초기화가 되어야 함

배열의 생성

// 배열의 생성은 초기화 없이 메모리 영역만 할당해준다.

// 1차원 배열의 생성
int arr1[] = new int[5];
int[] arr2 = new int[5];
int arr3[];
arr3[] = new int[5];

// 2차원 배열의 생성
int arr4[][] = new int[3][2];
int[][] arr5 = new int[3][2];
  • 생성된 배열은 따로 초기화하지 않아도 원소가 숫자형인 경우에는 0으로, 참조형인 경우에는 null로 초기화된다.

배열의 크기

  • 배열의 크기는 '배열이름.length'를 이용해서 얻을 수 있음
  • n차원 배열의 경우 '배열이름[]...[].length'를 사용
int arr1[] = new int[5];
for(int i = 0; i < arr1.length; i++) {
	arr1[i] = i;
}
반응형

 

문자열

  • 문자열을 다루기 위한 String이라는 클래스 제공
  • 참조형

문자열의 생성 및 초기화

String str1 = "java";
String str2, str3;
str2 = "java2";
str3 = str2;

// String 클래스 생성자를 이용하여 초기화 가능
String str4 = new String("java");

+ 연산자

  • 문자열에서 '+' 연산자의 의미는 문자열을 연결한다는 의미이다.
  • 또 문자열뿐만 아니라 다른 기본형이나 참조형과의 연산도 가능하게 해 준다.
  • + 연산자를 사용할 경우 기본형이거나 다른 참조형의 피연산자 값을 문자열로 자동으로 변환해준다.
String str1 = "java";
String str2 = " application";
String str3 = str1 + str2;
str3 = "java" + 2; // "java2"

System.out.println, System.out.print

  • System.out.println() 메서드는 표준 출력 스트림이 제공하는 메서드이다.
  • Java에서의 모든 입출력은 '스트림(stream)'이라는 클래스에 의해 이루어진다.
  • 스트림 중에서 표준 출력을 담당하는 출력 스트림이 System.out이다.
  • 출력 메서드 중에서 println()과 print() 메서드가 대표적으로 많이 사용된다.
    • print() 메서드는 단순히 출력만 하고, println()은 출력 후 줄 바꿈이 된다.
    • 두 개의 메서드는 내부적으로 모든 매개변수를 문자열로 반환하여 출력하기 때문에 문자나 문자열 외에 다른 자료형을 넘겨주어도 출력이 가능하다.
반응형

 

Scanner 클래스를 이용한 간단한 입출력

  • Scanner 클래스를 사용하려면 'java.util' 패키지를 import 해야 한다.
  • import <사용할 패키지 이름>.<클래스 이름>;
import java.util.Scanner;

문자열 입력과 출력

  • Scanner 클래스를 이용하여 문자열을 입력받을 때는 줄 단위로 입력받는다. 즉 '엔터키'를 누를 때까지 입력된 문자열을 입력 받는다.
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
	System.out.println(sc.nextLine());
}
  • hasNextLine() : 입력이 계속되는지 끝났는지를 확인하는 메서드
  • nextLine() : 입력된 문자열을 리턴해주는 메서드
  • 사용자가 다른 문자열을 입력하는 대신 'ctrl-c'나 'ctrl-z'를 입력하면 hasNextLine() 메서드는 false를 리턴하게 되고 프로그램이 종료된다.

정수형 숫자의 입력과 출력

Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()) {
	System.out.println(sc.nextInt());
}
  • Scanner 클래스를 이용하여 정수형 숫자를 입력받으려면 hasNextInt() 메서드와 nextInt() 메서드를 사용한다.
  • nextInt()는 입력된 줄 전체를 한꺼번에 리턴하지 않고 공백 문자나 탭(tab) 문자가 중간에 들어가 있다면 공백이나 탭을 구분자로 간주하여 구분자로 끊어서 한 단어씩 리턴한다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'방통대 컴퓨터과학과/3학년1학기' 카테고리의 다른 글
  • [운영체제] 스케줄링 알고리즘
  • [C언어] 자료형과 선행처리기
  • 데이터베이스 모델링
  • [운영체제] 프로세스 개요
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    egov
    JPA
    IT
    SpringBoot를 이용한 RESTful Web Service 개발
    알고리즘
    MSA
    방통대
    코딩테스트
    QueryDSL
    개발자
    백준
    토이프로젝트
    Java
    넥사크로
    스프링부트
    기출문제
    react
    토비의스프링부트
    운영체제
    프론트엔드
    에러해결
    자바스크립트
    프로그래머스
    oracle
    전자정부프레임워크
    springboot
    인프런
    Spring
    RESTful
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[JAVA] JAVA 기본 문법
상단으로

티스토리툴바