
GIF 출처 : https://www.amigoscode.com/courses/java
1 ) 자바의 특징과 기본 구조
2 ) 상수 , 변수 그리고 자료형 및 연산자
3 ) 입력과 출력
4 ) 1장 백준 연습문제
자바는 다음 목적을 위해 개발된 언어이다.
- 자바의 목적
① 플랫폼 호환성 문제 해결
② 플랫폼 독립적인 언어 개발
③ 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용
다음으로 자바는 다음과 같은 특징들을 지니고 있다.
① 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에서 자바를 설치했을 때 생기는 폴더들이다. 참고용으로만 보면 좋겠다.
자바 프로그램 개발 단계
: 자바를 통한 프로그램 개발은 다음과 같은 과정을 걸친다. 참고용으로만 보면 좋겠다.

- 상수 ( 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);
}
}
다음은 형변환을 사용하여 같은 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);
}
}
위 코드 결과의 콘솔창은 다음과 같다.








다음은 비교 연산자와 논리 연산자를 이용한 예시이다. 결과창은 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)));
}
}
위 코드의 결과는 다음과 같다.

① 출력
: 자바는 다른 언어와 마찬가지로 사용자가 원하는 부분을 그대로 출력 하는 것과 데이터 타입에 따라 출력하는 두가지로 나뉜다.
(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 입니다.");
}
}

문제 목록
- 2557번 ) Hello World! : https://www.acmicpc.net/problem/2557
- 1000번 ) A + B : https://www.acmicpc.net/problem/1000
- 1001번 ) A - B : https://www.acmicpc.net/problem/1001
- 10998번 ) A * B : https://www.acmicpc.net/problem/10998
- 1008번 ) A / B : https://www.acmicpc.net/problem/1008
- 10869번 ) 사칙연산 : https://www.acmicpc.net/problem/10869
- 10926번 ) ??! : https://www.acmicpc.net/problem/10926
- 18108번 ) 1998생인 내가 태국에서는 2541년생?! : https://www.acmicpc.net/problem/18108
- 10430번 ) 나머지 : https://www.acmicpc.net/problem/10430
- 2588번 ) 곱셈 : https://www.acmicpc.net/problem/2588
- 11382번 ) 꼬마 정민 : https://www.acmicpc.net/problem/11382
- 10171번 ) 고양이 : https://www.acmicpc.net/problem/10171
- 10172번 ) 개 : https://www.acmicpc.net/problem/10172
- 27866번 ) 문자와 문자열 : https://www.acmicpc.net/problem/27866
- 2743번 ) 단어 길이 재기 : https://www.acmicpc.net/problem/2743
- 9086번 ) 문자열 : https://www.acmicpc.net/problem/9086
- 11654번 ) 아스키 코드 : https://www.acmicpc.net/problem/27866
- 11720번 ) 숫자의 합 : https://www.acmicpc.net/problem/11720
- 10809번 ) 알파벳 찾기 : https://www.acmicpc.net/problem/10809
- 2675번 ) 문자열 반복 : https://www.acmicpc.net/problem/2675
- 1152번 ) 단어의 개수 : https://www.acmicpc.net/problem/1152
- 2908번 ) 상수 : https://www.acmicpc.net/problem/2908
- 5622번 ) 다이얼 : https://www.acmicpc.net/problem/5622
- 11718번 ) 그대로 출력하기 : https://www.acmicpc.net/problem/11718
내용 리뉴얼 및 추가 예정