[ JAVA ] 자바 개념 및 기본 문법

Wooju Kang ·2024년 2월 1일
post-thumbnail

GIF 출처 : https://www.amigoscode.com/courses/java


🖥 Contents


1 ) 자바의 특징과 기본 구조

2 ) 상수 , 변수 그리고 자료형 및 연산자

3 ) 입력과 출력

4 ) 1장 백준 연습문제





1 ) 자바의 특징과 기본 구조


  • 자바 ( JAVA )
    : 자바는 1991년, 선마이크로시스템즈 사의 제임스 고슬링 ( James Gosling ) 의 그린 프로젝트 ( Green Project ) 에서 시작 되었다.

자바는 다음 목적을 위해 개발된 언어이다.

  • 자바의 목적
    플랫폼 호환성 문제 해결
    플랫폼 독립적인 언어 개발
    ③ 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용

다음으로 자바는 다음과 같은 특징들을 지니고 있다.

① WORA ( Write Once Run Anywhere )
: 한번 작성된 코드는 모든 플랫폼에서 바로 실행된다.
-> OS , H/W에 상관없이 자바 프로그램이 동일하게 실행되면서 C / C++ 등 기존 언어가 가진 플랫폼 종속성을 극복하였다.

② 바이트 코드 ( Byte Code )
: 자바 소스를 컴파일한 목적 코드로 CPU에 의해 직접 실행되지 않기 때문에 CPU에 종속적이지 않은 중립적인 코드이다. 이때 자바는 C / C++과 다르게 링크 과정이 존재하지 않으며 컴파일러가 바로 바이트 코드를 생성한다.
( 링크 과정에 관한 설명은 프로그래밍 언어론 에서 다룬다. )
이러한 바이트 코드는 JVM ( Java Virtual Machine )에 의해 해석되고 실행된다.

③ JVM ( Java Virtual Machine )
: 자바의 바이트 코드를 실행하는 자바 가상 기계이다. JVM은 자바의 플랫폼 호환성 문제를 해결한 중요한 요소 중 하나이다. JVM은 각기 다른 플랫폼에 설치가 가능하며 다른 플랫폼 이더라도 동일한 자바 실행 환경을 제공하는 장점이 있다.

  • 자바 플랫폼의 종류

: 자바에는 개발 환경에 따라 다양한 자바 배포판이 제공된다.

① Java SE ( Standard Edition )
: 자바의 표준 배포판으로 데스크탑과 서버 응용 개발 플랫폼

② Java EE ( Enterprise Edition )
: 자바의 기업용 배포판으로 자바를 이용한 다중 사용자 , 기업용 응용 개발을 위한 플랫폼 이다.
Java SE 버젼에 인터넷 기반 서버사이드 컴퓨팅 관련 API ( Application Program Interface ) 가 추가된 형태이다.

③ Java ME ( Micro Edition )
: 휴대 전화나 PDA , 셋톱박스 등 제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플랫폼으로 임베디드 시스템에 사용된다.

그 중에서 우리가 자세히 공부할 버젼은 SE 버젼이다. 3가지 버젼 모두 SE 버젼을 기본으로 하기 때문에 자세히 알아볼 필요가 있다. SE 버젼에는 다음과 같은 구성이 있다.


이러한 구성들은 다음과 같은 구조를 지니고 있다.

  • JDK ( Java Develope kit )
    : 자바 응용 개발 환경으로 개발에 필요한 도구를 포함하고 있다.
    -> 컴파일러 , JRE ( Java Runtime Envrionment ) , 클래스 라이브러리 , 샘플 등
  • JDK 의 bin 디렉터리에 포함된 개발 도구

    - bin 파일 : 자바로 프로그램을 개발할 때 실행시키는 파일들이 담겨있는 곳

    javac : 자바 소스를 바이트 코드로 변환하는 컴파일러

    ② java : JRE의 bin 디렉토리에도 있는 자바 응용프로그램 실행기

    ③ jar : 자바 아카이브 파일 ( JAR ) 의 생성 및 관리하는 유틸리티

    ④ jdb : 자바 디버거

    ⑤ appletviewer : 웹 브라우저 없이 애플릿을 실행하는 유틸리티

    -> 애플릿 : 자바 언어로 구성된 작은 응용프로그램

    • JRE ( Java Runtime Environment )
      : 자바의 실행 환경으로 JVM에 포함 되어 있다. 자바 실행 환경만 필요한 경우 JRE만 별도로 다운로드 가능하다

    • API ( Application Programming Interface )
      : JDK에 포함된 클래스 라이브러리로 주요 기능들이 미리 구현된 코드 ( 클래스 라이브러리 )의 집합으로 API 를 이용하여 쉽고 빠르게 프로그램 개발이 가능하다.

    • Package ( 자바 패키지 )
      : 서로 관련된 클래스들을 분류하여 묶어 놓은 것으로 계층 구조로 이루어져 있다.
    -> 즉 , 같은 패키지 안에 다른 이름의 클래스가 존재하며 다른 패키지에는 같은 이름의 클래스가 존재할 수 있다는 것이다.


    • 실제 자바 파일 형태
      : 다음은 Windows에서 자바를 설치했을 때 생기는 폴더들이다. 참고용으로만 보면 좋겠다.
  • 자바 프로그램 개발 단계

: 자바를 통한 프로그램 개발은 다음과 같은 과정을 걸친다. 참고용으로만 보면 좋겠다.




2 ) 상수 , 변수 그리고 자료형 및 연산자


  • 자바의 코드 블록은 C언어와 매우 유사하다. 그러나 객체 지향언어 이기 때문에 클래스 와 함수 및 클래스 상속등으로 코드가 이루어지는 점을 고려할 필요가 있다.

    본 포스팅은 객체 지향언어를 경험해본 필자의 기준에서 작성하기 때문에 객체지향언어의 상속 , 클래스 및 함수 등과 관련된 기본 지식은 알고있다는 전제를 두고 있으므로 첫 개발 언어로 자바를 택하는 분들 은 꼭 객체 지향 개념을 익히고 포스팅을 활용하면 좋겠다.

    필자가 부족하거나 자바에서는 다른 특징을 지닌 부분은 개념을 짚고 넘어가도록 하겠다.
  • 상수 ( Constant )
    : 상수는 final 키워드를 통해서 표현한다. 선언시 초기 값을 지정하도록 한다.

  • 문자 리터럴 ( Character Literal )
    : 문자는 단일 인용부호 ( ' ) 를 사용하며 문자 하나를 표현한다. 유니코드 규격중 UTF - 16 을 따른다.

  • 문자열 리터럴 ( String Literal )
    : 문자열은 이중 인용부호 ( " ) 로 묶어서 표현 하며 자바에서 문자열은 객체 ( String 객체 ) 이다.
    -> String 클래스가 제공된다.

다음은 변수 , 상수 , 리터럴을 이용한 예시이다. 원하는 결과 창은 원의 반지름이 주어지고 그에 따른 면적을 출력하는 것이다.

예시 ) 변수 , 상수 , 리터럴 사용하기

public class CircleArea {
	public static void main(String[] args) {
		final double PI = 3.141592;
		double radius = 5.0;
		double circleArea = 0;
		circleArea = radius * PI * radius;
		System.out.print("원의 면적=");
		System.out.println(circleArea);
	}
}
  • 형변환 ( Type Conversion )
    : 형변환에는 ① 묵시적 형변환 ② 명시적 형변환 이 존재한다. 형변환의 두가지 종류에 대해서는 프로그래밍 언어론 에서 자세히 다룬다. 기본적인 타입의 크기 및 종류에 대해서는 기본적인 프로그래밍 개념이므로 넘어간다.

다음은 형변환을 사용하여 같은 R - Value 값에 대해서 다른 결과창을 보여주는 예시이다.

예시 ) 형변환 사용

public class TypeConversion {
	public static void main(String[] args) {
		byte b = 127;
		int i = 100;
		System.out.println(b+i);
		System.out.println(10/4);
		System.out.println(10.0/4);
		System.out.println((char)0x12340041);
		System.out.println((byte)(b+i));
		System.out.println((int)2.9+1.8);
		System.out.println((int)(2.9+1.8));
		System.out.println((int)2.9+(int)1.8);
	}

}

위 코드 결과의 콘솔창은 다음과 같다.

  • 식별자
    : 클래스 , 변수 , 상수 , 메소드 , 인터페이 등에 붙이는 이름으로 식별자에는 특수문자 , 공백 또는 탭등이 사용될 수 있다. 이에 관해서는 프로그래밍 언어론의 이름편을 참고하면 된다. 이때 이름이 될 수 없는 키워드들이 존재하는데 다음 사진을 참고하길 바란다.



  • 연산자
    : 연산자는 주어진 식을 계산하여 결과를 얻어내는 연산에 필수적인 요소이다. 연산자는 코딩에 있어 값의 할당 , 산술 연산 , 변화 , 비교에 사용되는 중요한 요소로 C와 파이썬을 학습하였다면 알고 있는 부분이므로 간단히 어떤 연산자가 있는지만 소개하도록 하겠다.

다음은 비교 연산자와 논리 연산자를 이용한 예시이다. 결과창은 3 과 2를 이용하여 논리 연산자와 비교 연산자를 혼합하여 사용하였을 때 달라지는 결과를 호출하고자 한다.

예시 ) 비교 연산자와 논리 연산자 사용

public class LogicalOperator {
	public static void main(String[] args) {
		System.out.println('a'>'b');
		System.out.println(3>=2);
		System.out.println(-1<0);
		System.out.println(3.45<=2);
		System.out.println(3==2);
		System.out.println(3!=2);
		System.out.println(!(3!=2));
		System.out.println((3>2)&&(3>4));
		System.out.println((3!=2)||(3>4));
		System.out.println((3!=2)||(-1>0));
		System.out.println((3 !=2)^(-1>0));
	}
}

위 코드의 결과는 다음과 같다.


다음은 비트 연산자와 시프트 연산자를 이용한 예시이다. 각 연산자의 사용 결과를 콘솔창에 보여주는 것이 목표이다.

예시 ) 비트 연산자와 시프트 연산자

public class BitShiftOperator {
	public static void main(String[] args) {
		short a = (short)0x55ff;
		short b = 0x00ff;
		System.out.printf("%x\n",a&b);
		System.out.printf("%x\n",a|b);
		System.out.printf("%x\n",a^b);
		System.out.printf("%x\n",~a);
		
		byte c = 20;
		byte d = -8;
		System.out.printf("%x\n",c<<2 );
		System.out.printf("%x\n",c>>2 );
		System.out.printf("%x\n",d>>2 );
		System.out.printf("%x\n",d>>>2 );
	}
}

위 코드의 결과는 다음과 같다.

  • 조건 연산자
    : 조건 연산자의 경우 조건문 파트에서 자세히 다루도록 하겠다. 삼항 조건 연산자의 경우 이러한 형식을 갖추고 있다는 것만 알아두면 좋을 듯 하다.

    ( 조건 ) ? ( 조건이 참일 경우 시행 ) : ( 조건이 거짓일 경우 시행 )


다음은 조건 연사자를 통해 입력된 숫자의 차를 콘솔창에 띄우는 것을 목표로 하는 것이다.

예시 ) 조건 연산자의 사용

public class TernaryOperator {
	public static void main(String[] args) {
		int a = 3;
		int b = 5;
		
		System.out.println(" 두 수의 차는 " + ((a>b)?(a-b):(b-a)));
	}
}


위 코드의 결과는 다음과 같다.




3 ) 입력 과 출력


  • 입력 과 출력은 프로그램 설계에 있어 아주 기본이 되는 중요한 기능중 하나이다. 프로그래머가 일관된 결과를 만들어내는 코드가 아닌 서로 다른 사용자의 목적을 충족할 수 있는 코드를 만들어낼때 필요한 아주 기초적인 수단이다.
    자바 ( JAVA )에서 학습해야 할 부분은 어떻게 입력 스트림 , 출력 스트림을 구현하는가를 알고 암기하며 잘 사용 하는 것이다.

① 출력
: 자바는 다른 언어와 마찬가지로 사용자가 원하는 부분을 그대로 출력 하는 것과 데이터 타입에 따라 출력하는 두가지로 나뉜다.

(1) System.out.println
: 표준 출력 스트림에 출력하는 방식으로 System.out의 println()메소드를 출력하는 것이다. 사용자가 원하는 출력물을 그대로 출력한다.

ex 1 )

System.out.println("나는 코딩왕") // 나는 코딩왕

ex 2 )

System.out.println("123") // 123

(2) System.out.printf
: println과 달리 서식 지시어를 사용하며 원하는 데이터값을 % 키워드를 통해 구현할 수 있다.

ex )

 System.out.printf("byte min: %d max %d\n", Byte.MIN_VALUE, Byte.MAX_VALUE); // 정수 출력
System.out.printf("circle area=%f\n", area); // 실수 출력

② 입력
: 자바는 객체 지향 언어로 클래스에서 객체를 받아 입력 스트림을 구현한다. 자바에서는 java.io 패키지의 InputStream 클래스 에서 Scanner 객체를 생성한 후 이를 통해 입력 받는다.

import java.util.*; // 자바의 내장 클래스 모두를 import 한다.
Scanner input = new Scanner(System.in); // Scanner 객체 생성
System.out.println(" 문장을 입력하시오 : ");
String line = input.nextLine();

이때 Scanner 클래스의 주요 메소드는 다음과 같다.

다음은 Scanner를 이용한 키 입력 후 출력을 하는 콘솔창을 목표로 하는 것이다.코드는 다음과 같다.

예시 ) Scanner를 이용한 키 입력

import java.util.Scanner;
public class ScannerExam {
	public static void main(String[] args) {
		Scanner a = new Scanner(System.in);
		System.out.println("나이,체중,신장을 빈칸으로 분리하여 순서대로 입력하세요");
		System.out.println("당신의 나이 " + Integer.parseInt(a.next()) + "살 입니다.");
		System.out.println("당신의 체중 " + Double.parseDouble(a.next()) + "kg 입니다.");
		System.out.println("당신의 신장 " + Double.parseDouble(a.next()) + "cm 입니다.");
	}

}

위 코드의 결과는 다음과 같다.







4 ) 1장 백준 연습문제


  • 백준 연습문제에 들어가기 앞서 C 나 Python과 달리 JAVA로 백준에서 제출할 경우 패키지 와 메인 클래스 의 문제로 오류가 발생할 수 있다. 그렇기에 주의해야할 점들을 잘 정리해 놓은 포스트가 있으니 연습문제를 풀때 이를 참고하길 바란다.

    URL : https://nahwasa.com/entry/자바로-백준-풀-때의-팁-및-주의점-boj-java

문제 목록

profile
배겐드 📡

1개의 댓글

comment-user-thumbnail
2025년 3월 25일

내용 리뉴얼 및 추가 예정

답글 달기