--------------------------------------------------------- ● o ●
--------------------------------------------------------
* java 기본구조
ㄴpackage java1205; //
public class hello {
public static int sum(int n,
int m) {return n + m;} // 메소드
public static void
main(String[] args) {}; //
}
* public static void main(String[] args)
ㄴ html body와 비슷하다고 생각하면 된다.
ㄴ public : 공개가 되는. 여러 스타일이 있는데 public은 공개가 되야할때.
ㄴ static : 실행시 상태가 고정된다. 우선
ㄴ void : 그냥 받아 들인다. int 등으로도 기입 가능.
ㄴ main : 실행되는 메인.
ㄴ (String[] args) : []배열에서 args라는 변수명. 변수명은 마음대로 지정가능.
ex)
* 변수 범위를 나타내는 중괄호 {} 블록
ㄴ 조건문과 반복문의 중괄호 {} 블록 내에 선언된 변수는 해당 중괄호 {} 블록 내에서만 사용 가능
public static int sum(int n, int
m) {
return n + m;
}
public static void main(String[]
args) {
// TODO Auto-generated method stub
int i = 20;
// int 정수형 i 변수에 20이라는 값을 대입
int s;
// int 정수형 s 변수를 선언
char a;
// char 문자형 a 변수를 선언 - char 한글자
s = sum(i, 10);
// s = 30
a = '?';
System.out.println(a);
// a = ? 문자를 대입
System.out.println("Hello");
System.out.println(s);
};
}
ㄴ Hello 이름의 클래스 선언
ㄴ public class Hello {}
ㄴ class 키워드로 클래스 선언
ㄴ public으로 선언하면 다른 클래스에서 접근 가능
ㄴ 클래스 코드는 { } 내에 모두 작성
ex)
* 주석문
ㄴ // 한 라인 주석
ㄴ /* 여러 행 주석 */
ex)
* main() 메소드
ㄴ자바 프로그램은 main()에서 실행 시작
ㄴpublic static void main(String[] args) {}
ㄴ public static void으로 선언
ㄴ String[] args로 실행 인자를 전달 받음
ex)
* 메소드
ㄴ C/C++에서의 함수를 메소드로 지칭
ㄴ public static int sum(int n, int m) {
...
}
ㄴ 클래스 바깥에 작성할 수 없음
ex)
* 메소드 호출
ㄴ sum() 메소드 호출
ㄴ s = sum(i, 10);
ㄴ sum() 호출 시 변수 i의 값과 정수 10을 전달
ㄴ sum()의 n, m에 각각 20, 10 값 전달
ㄴ sum()은 n과 m 값을 더한 30 리턴
ㄴ 변수 s는 정수 30을 전달받음
ex)
* 변수 선언
ㄴ 변수 타입과 변수 이름 선언
int i=20;
char a;
ㄴ 메소드 내에서 선언된 변수는 지역 변수 // 지역 변수는 메소드 실행이 끝나면 저장 공간 반환
ex)
* 문장
ㄴ ;로 한 문장의 끝을 인식
int i=20;
s = sum(i, 20);
ex)
* 화면 출력
ㄴ 표준 출력 스트림에 메시지 출력
ㄴ System.out.println("Hello"); // "Hello" 화면 출력
ㄴ 표준 출력 스트림 System.out의 println() 메소드 호출
ㄴ println()은 여러 타입의 데이터 출력 가능
ㄴ println()은 출력 후 다음 행으로 커서 이동
ex)
* 식별자란?
ㄴ클래스, 변수, 상수, 메소드 등에 붙이는 이름
ㄴ식별자의 원칙
ㄴ‘@’, ‘#’, ‘!’와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수 없으나 ‘_’, ‘$’는 사용 가능
ㄴ유니코드 문자 사용 가능. 한글 사용 가능 // 한글은 될수 있으면 사용 지양
ㄴ자바 언어의 키워드는 식별자로 사용불가
ㄴ식별자의 첫 번째 문자로 숫자는 사용불가
ㄴ‘_’ 또는 ‘$’를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않는다.
ㄴ불린 리터럴 (true, false)과 널 리터럴(null)은 식별자로 사용불가
ㄴ길이 제한 없음
** 대소문자 구별
ㄴ int barChart; 와 int barchart;는 서로 다른 식별자 선언
* 자바 예약어
abstract
assert
boolean
break
......
ex)
※ 자바 데이터 타입 ※
ㄴ 자바의 데이터 타입
ㄴ 용도에 따라 메모리 생각하고 타입 선택할 것
ex)
* 자동 타입 변환
ㄴ 데이터 타입을 다른 타입으로 변환하는 것
ㄴ 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생
ㄴ 정수 타입이 실수 타입으로 대입되면 무조건 자동 타입 변환이 됨
ㄴ 예외: char 타입보다 허용 범위가 작은 byte 타입은 char 타입으로 자동 변환될 수 없음
* 캐스팅 연산자로 강제 타입 변환하기
ㄴ 큰 허용 범위 타입을 작은 허용 범위 타입으로 쪼개어서 저장하는 것
ㄴ캐스팅 연산자로 괄호( )를 사용하며, 괄호 안에 들어가는 타입은 쪼개는 단위
ㄴ예: int → byte 강제 타입 변환
* 상수 선언
ㄴ final 키워드 사용
ㄴ 선언 시 초깃값 지정
ㄴ 실행 중 값 변경 불가
ㄴ 바뀌면 안되는 것들을 상수로 선언
ㄴ final 데이터 타입 상수명 = 값;
ㄴ final double PI = 3.14; // 원주율을 상수로 선언
* 1byte = 8bit = 28
= 256 // 표현 0~255 or -128 ~ 127
*기본 타입 : 8 개
ㄴ 기본 타입의 크기는 CPU나 운영체제에 따라 변하지 않음
**논리형
boolean // 1bit : True False 구분
**문자형
char // 2byte : 한글자 - 문자형
**정수형 - 소숫점이 없는 숫자
byte // 1byte : -128 ~ 127
short // 2byte : -32768 ~ 32767
int // 4byte : -231
~ 231
-1
long // 8byte : -269
~ 263
-1
** 실수형 - 소숫점이 있는 숫자
float // 4byte
double // 8byte
*레퍼런스 타입 : 1 개이며 용도는 다음 3 가지
**클래스(class)에 대한 레퍼런스
**인터페이스(interface)에 대한 레퍼런스
**배열(array)에 대한 레퍼런스
ex)
--------------------------------------------------------- ● o ●
--------------------------------------------------------
* 변수
ㄴ 프로그램 실행 중에 값을 임시 저장하기 위한 공간 // 변수 값은 프로그램 수행 중 변경될 수 있음
ex)
* 변수 선언
ㄴ 데이터 타입에서 정한 크기의 메모리 할당
-----------------------------------------------
int radius;
double weight = 75.56;
char c1 , c2, c3 = 'c'; // c3 에만 'c'들어가고 c1,c2는 선언만 된 상태
-----------------------------------------------
* 진수 이해하기
10진수 : 0 ~ 9 // 15
8진수 : 0 ~ 7 // 015
16진수 : 0 ~ F // 0x15
0 ~ 15
A 11
B 12
C 13
D 14
E 15
F 16
2진수 : 0 1 // 0b0101
ex)
* 리터럴과 정수 리터럴
ㄴ
ex)
* 리터럴(literal)
ㄴ 프로그램에서 직접 표현한 값
ㄴ 정수, 실수, 문자, 논리, 문자열 리터럴 있음
ex)
* 정수 리터럴
ㄴ 10진수, 8진수, 16진수, 2진수 리터럴
ex)
15 -> 10진수 15
int
n = 15;
015 -> 0으로 시작하면 8진수. 십진수로 13
int
m = 015;
0x15 -> 0x로 시작하면 16진수. 십진수로 21
int k =
0x15;
0b0101 -> 0b로 시작하면 2진수. 십진수로 5
int b =
0b0101
* 정수 리터럴은 int 형으로 컴파일
ㄴ
ex)
* long 타입 리터럴은 숫자 뒤에 L 또는 l을 붙여 표시
ㄴ
ex) long g = 24L;
* 실수 리터럴
** 소수점 형태나 지수 형태로 표현한 실수
12. 12.0 .1234 0.1234 1234E-4
** 실수 타입 리터럴은 double 타입으로 컴파일
double d = 0.1234;
double e = 1234E-4; // 1234E-4 = 1234x10-4이므로 0.1234와 동일
** 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 함
ㄴ D를 대문자로 표기 구분
float f = 0.1234f;
double w = .1234D; // .1234D와 .1234는 동일
ex)
* 자바에선 문자와 문자열을 구분한다. // 자바스크립트에선 "", '' 구분안하고 사용하지만.
** 문자 : char
ㄴ 단일 인용부호(' ')로 문자 표현
ㄴ char name = 'A' ;
ㄴ 유니코드로도 표현가능. \u다음에 4자리 16진수로, 2 바이트의 유니코드(Unicode) ex) char c = \uae00; //
'글'의 유니코드 값(ae00) 사용
* 변수를 설정하고 계산 할때는 반드시 초기값을 설정해줘야 한다. 그렇지 않으면 null이 되어 수학적으로 계산이 안된다. 초기값을
넣어줘야 대입한 값으로 계산을 한다.
ㄴ
ex)
* 문자와 숫자를 계산하면 문자를 아스키 코드의 숫자로 변환해서 계산해버린다.
ㄴ
ex)
* 논리 타입 리터럴
ㄴ 논리 값 표시
ㄴ true 또는 false 뿐
ㄴ boolean 타입 변수에 치환하거나 조건문에 이용
* 자바 13버전 이후론 """로도 "를 넣을 수 있다
ㄴ
ex)
* 자바의 키 입력과 System.in
ㄴ System.in
ㄴ 키보드와 연결된 자바의 표준 입력 스트림
ㄴ 입력되는 키를 바이트(문자 아님)로 리턴하는 저수준 스트림
ㄴ System.in을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움 있음
ex)
* 자바 13버전 이후론 """로도 "를 넣을 수 있다
ㄴ
ex)
* Scanner 클래스
** 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴
ㄴ java.util.Scanner
** 객체 생성
ㄴ 키보드에 연결된 System.in에게 키를 읽게 하고, 원하는 타입으로 변환하여 리턴
* 자바 입력문
ㄴ System.in
ㄴ 키보드와 연결된 자바의 표준 입력 스트림
ㄴ 입력되는 키를 바이트(문자 아님)로 리턴하는 저수준 스트림
ㄴ System.in을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움 있음
* 자바 입력문
표준 출력 : System.out
표준 입력 : System.in
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
scan.next()
한
문자열로 반환
scan.nextLine() 한 줄을 하나의 문자열로 반환
scan.nextInt() 입력
토큰을 한 정수로 반환
scan.nextDouble() 입력 토큰을 double형 실수로 반환
scan.nextFloat() 입력 토큰을 float형 실수로 반환
ㄴ 가장 기본이 되는 조건문
ㄴ if(조건식){실행부분};
ㄴ if-else
ㄴ if - else if : 다중 if문
ㄴ 중첩 if문 : if문 안에 if문을 사용할 수 있다
* 블럭안에선 {}을 생략해도 되지만 들여쓰기를 잘하고 웬만하면 생략안하는게 낫다.
ㄴ
ex)
* Integer.parseInt();
ㄴ 형전환
ex)
* import java.util.*;
ㄴ java 전체 클래스를 사용 할 수 있다.
ㄴ import java.util.Scanner; // 이런식으로 사용할 클리스를 직접 지정할 수도 있다.
ex)
* 터미널, cmd, 명령프롬프트
ㄴ 다 같은말
ex)
* 편집기는 각자 특성이 있다
ㄴ 비주얼 스튜디오 : 텍스트 편집기
ㄴ 이클립스 : 자바
ex)
* equals()
ㄴ 문자열 비교시 사용
ㄴ 문자열은 == 등으로 비교하면 잘안됨
ex)
* print, println, printf
ㄴ
ex)
* scan.close();
ㄴ 충돌을 일으키지 않게 사용한건 종료시켜야.
ex)
* Scanner
ㄴ 키보드로 부터 입력하는 데이터를 읽기 위한 Scanner 객체
ㄴ Scanner scan = new Scanner(System.in);
ex)
* 변수는 덮어쓰기는 가능하지만 선언한 형이 있다면 다른 형으로 중복 선언 할 수 없다.
----------------------------------------------------------------------------------------------------------
형변환을 하려고 int a, bouble a 두개를 쓰면 컴퓨터는 같은 이름이 두번 정의 되었다고 인식한다.
오류가 나지 않으려면 다른 이름을 써야 한다.
int a;
double a = (bouble) a;
----------------------------------------------------------------------------------------------------------
값을 덮어 씌우는 것은 상관없다.
ㄴ 엔터까지 대기열에 넣어버리기 때문에
ㄴ int, double 등은 엔터 무시하고 값을 취함
ㄴ line등은 안그렇기때문에 scan.nextLine(); 등을 넣어서 처리
------------------------------------------
flag = scan.next();
scan.nextLine();
} while (flag.equals("y"));
------------------------------------------
* 변수명.length()
ㄴ 문자열에서 글자 갯수를 센다.
ㄴ 빈칸 ' ', 빈줄 '\n', 탭 '\t' 의 숫자도 센다.
ex)
* 변수명.charAt();
ㄴ 문자열에서 문자를 하나씩 뽑아낸다
ㄴ 뽑아낸 문자는 문자로 인식한다
ㄴ 첫번째 문자는 0이다.
ㄴ 컴퓨터는 0부터 카운터한다.
ex)
* 배열
ㄴ 배열은 같은 타입의 값만 관리한다.
ㄴ 배열의 길이는 늘리거나 줄일 수 없다.
ㄴ 같은 타입의 변수를 하나의 묶음으로 관리합니다.
ㄴ int[] 변수명 = new int[100]; // 변수0, 변수1 ......... 변수99까지 생성됨
ㄴ 인덱스 = 방번호 // 0부터 시작, n을 입력하면 방은 n개지만 마지막 방번호는 n-1 이다
ㄴ int[] a = new int[3] // a[0], a[1], a[2] 생성
ㄴ String[] season = {"문장1", "문장2", "문장3", "문장4"}; // String도 가능
** 배열 쉽게 선언하기
ㄴ 타입 [] 배열이름 = new 타입[] { 요소1, 요소2, 요소3, 요소 4} ;
ㄴ 타입 [] 배열이름 = { 요소1, 요소2, 요소3, 요소 4} ; // new 타입[] 생략가능
ㄴ int[] student = {30, 20, 10};
ㄴ 타입 [] 배열이름;
ㄴ 타입 배열이름[];
-------------------------------------------------------------------
String[] season = { "Spring","Summer","Fall","winter" };
--------------------------------------------------------- ● o ●
--------------------------------------------------------
* 메소드(기능)
ㄴ
자바 프로그램 <- 클래스의 모음 : 하나 이상의 클래스들로 구성
클래스 <- 데이터 선언들과 메소드 저의 들로 이루어 진다.
메소드는 클래스의 주요 구성요소이다.
메소드 <- 특정 작업을 수행하는 자바 문들의 모음이다.
표준 클래스 라이브러리에 있는 메소드
System.out.println : println 메소드를 호출
메소드 종류(2가지)
- 특정 작업을 수행하고 결과 값을 반환하는 메소드
- 특정 작업을 수행하고 결과 값을 반환하지 않는 메소드
String 클래스의 length 메소드 : 문자 길이를 반환
System.out 객체의 println 메소드 : 주어진 문자열을 출력하고 어떤 값도 반환하지 않는다.
ex)
* 메소드 정의
ㄴ 메소드는 값을 반환하느냐 반환하지 않는냐에 따라 다르게 정의
ㄴ 모든 메소드는 클래스내에 포함된다.
** 메소드는 머리부와 몸체로 이루어진다.
--------------------------------------------------------------------------------------------
Public 반환유형 메소드이름(형식매개변수 목록) <- 머리부
{
<-
몸체
문 1;
문 2;
문 n;
return <연산식> <- - 반환값
정의
public double computerAverage(int number1, int number2, int number3)
{
return (number1 + number2 + number3) / 3.0;
} 반환값O
--------------------------------------------------------------------------------------------
Public void dutchPay(int totalAmount, int count)
{
int dutchpayAmount;
ㄴ 모든 메소드는 특정 작업을 수행한다.
ㄴ 한 메소드가 특정 작업을 어떻게 수행하는지는 보통 알고리즘에 의해 기술된다.
ㄴ 알고리즘은 특정 문제를 풀기 위한 과정을 단계별로 기술한 것이다.
ㄴ 알고리즘은 보통 의사코드(pseudocode)와 순서도(flowchart) 중 하나를 사용하여 기술한다.
** 의사코드는 한들 문장들과 자바 문들을 혼합한 것이다.
의사코드는 자바 언어의 구문 규칙들을 그대로 따르지 않고 코드가 어떻게 수행될 지를 보여주기에
충분한 구조를 제공한다. 전문 프로그래머들은 의사코드가 자바로 프로그래밍하는 것에 더 가깝기
때문에 의사코드를 선호한다. 다만 의사 코드는 복잡한 조건들을 다루거나 반복의경우 초보자가
명확하게 기술하기가 쉽지 않다. 이런 경우 자주 사용되는 방법이 순서도이다.
순서도는 어떤 문제를 해결하는 데 필요한 논리적인 단계들을 그림으로 표시한 것이다.
1. 메소드의 이름 : findMin
2. 두 정수에 대한 변수 이름 : number1, number2
3. 두 정수에 대한 데이터 형 : int
4. 메소드 머리부 : public int findMin(int number1, int number2)
5. 메소드가 수행하여 최소값을 구하는 것
ㄴ 반복되는 것을 기능으로 만들어 불러내서 사용
ㄴ 클래스로 만들면 다른 곳에서도 사용 가능
ex)
* 재귀 메소드
보통 메소드는 어떤 작업을 수행하기 위해 다른 메소드를 호출한다.
그러나 메소드가 자기 자신을 호출할 수 있다.
이런 메소드는 재귀 메소드(recursive method)라고 부른다.
재귀(recursion)는 한 메소드가 어떤 작업을 수행하기 위해 자기 자신을 호출하는 프로그래밍 기법이다.
ㄴ
--------------------------------------------------------------------------------------------
System.out.println("두 개의 점수를 입력해 주세요(10 20)");
num1 = scan.nextInt();
num2 = scan.nextInt();
nPMTD(num1, num2);
--------------------------------------------------------------------------------------------
* 하나의 메소드로 여러가지 대응하게 만드는 방법
ㄴ 같은 이름으로 여러가지 경우를 전부 만들어주면 된다.
ex)
--------------------------------------------------------------------------------------------
public static void nPMTD(double num1, double num2) {
System.out.println("세수에 대한 합 " + nPlu);
System.out.println("세수에 대한 차 " + nMin);
System.out.println("세수에 대한 곱 " + nTim);
System.out.println("세수에 대한 나누기 " + nDiv);