Chapter 2. 자바 기본 프로그래밍

정다희·2023년 6월 14일

명품자바에센셜

목록 보기
3/6

자바 기본 프로그래밍

2.1 자바 프로그램의 구조

  • 클래스 만들기
  • class 키워드 : 클래스 이름 선언, {} 사이에 변수, 메소드 작성

  • public : 다른 클래스에서 이 클래스를 자유롭게 참고 가능하다 표시

  • 주석문
  • // or /* */
  • main() 메소드
  • public static void main(String[] args) { }

  • 한 클래스는 두개 이상의 메인 불가

  • 모든 클래스가 메인을 가지지는 않음

  • 메소드
  • 함수와 같은말

  • 클래스 내에 작성

2.2 식별자

  • 식별자 이름 규칙
  • 특수문자 _ $만 사용가능

  • 한글 가능

  • 키워드 불가능 (if, while, class)

  • 숫자로 시작 불가능

  • true, false, null 사용 불가

  • 대소문자 구별

2.3 자바의 데이터 타입

1) 기본타입 : boolean, char, byte, short, int, long, float, double

2) 레퍼런스 타입 : 한 가지 but 배열, 클래스, 인터페이스에 대한 레퍼런스 세가지로 사용함

  • 문자열
  • 기본 타입 X
  • 리터럴
  • 프로그램에 직접 표현한 값

  • 정수, 실수(double타입으로 자동 처리), 문자(' ' or /u유니코드 + 특수문자 리터럴), 논리 타입, boolean 타입

  • 기본 타입 외 리터럴 : null 리터럴(기본 타입에 사용 불가, 객체 레퍼런스에 대입), 문자열 리터럴(" ")

  • 상수
  • final 데이터타입 상수이름 = 값
  • 타입 변환
  • 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때 컴파일러는 작은 타입에서 큰 타입으로 자동변환

  • 큰-> 작은 강제 타입변환(캐스팅)하면 손실 발생

    int n=300;

    byte b= (byte)n;

2.4 자바의 키 입력

  • System.in : 표준 입력 스트림 객체, 키 값을 바이트 정보로 바꾸어 제공한다.

  • Scanner : system.in을 사용하면 바이트 정보를 응용 프로그램이 문자나 숫자로 변환해야 하므로, 스트림 클래스 Scanner를 사용하여 키보드에서 입력된 키를 문자나 정수, 실수, 문자열로 변환한다.

  • Scanner 키 입력
  • Scanner 객체 생성
Scanner scanner = new Scanner(System.in);
  • import 문 필요
import java.util.Scanner;
  • Scanner 클래스로 키 입력받기

: 사용자가 입력하는 키 값을 공백('\f', '\r', ' ', '\n')으로 구분되는 토큰 단위로 읽음

  • Scanner 스트림 닫기
scanner.close();

2.5 연산자

  • 식과 연산자

  • 증감 연산

종류 : ++, --

++a, --a : 전위연산자, 증가(++) 후 a값을 사용(적용)

a++, a-- : 후위연산자, a값을 먼저 사용(적용) 하고 그 다음 증가

  • 대입 연산
  • 비교 연산, 논리 연산
  • 20<=age<30 //오류

  • 조건 연산
  • 삼항 연산자

  • condition ? op1 : op2

  • 비트 연산

1) 비트 논리 연산 2) 비트 시프트 연산

  • 비트 개념

: 2진수의 한 자리, 8 bit = 1 byte

비트 논리 연산

  • 비트 시프트 연산 : float, double, boolean은 시프트 연산 X

비트 시프트 연산
CHECK TIME

int x=2, y=10, z=0;
z=x++*2+--y-5+x*(y%2);

z 값은?

1) 우선은 괄호 (y%2)부터 처리합니다.

현재 이 수식은 앞에 --y가 선위연산자이므로 9가 된 상태입니다. 그래서 9%2 해서 1이 됩니다.

2) 그 다음 곱셈부분을 합니다(사칙연산에서 우선순위가 곱셈, 나눗셈입니다)

현재 1)의 내용까지 다 쓰면

2 2 + 9 - 5 + 3 1 --> 두번째 x가 3이 된 이유는 후위연산자라 그렇습니다. 즉 첫번쩨 x가 먼저 원래 2라는 숫자를 표현하고 ++되면서 x가 3이 되버린 겁니다.

3) 연산하면 11입니다.

+) 알고리즘

1) 알고리즘의 정의 : 문제를 해결해 가는 방법, 절차

2) 알고리즘 설계 : 방법과 절차를 구체적으로 표현

  • 순차구조

  • 선택(조건)구조 : 조건문

  • 반복구조 : 반복문

3) 알고리즘의 표현 방법 : 자연어, 의사코드, 순서도

  • 자연어 : 일상의 말과 글로 표현

장: 이해가 빠르다

단: 내용이 길어진다

  • 의사코드 : 프로그래밍 언어 형태의 자연어 간략 표현(혼용)

장: 특정 프로그램 지식이 없어도 이해 가능

단: 약간의 프로그램 지식 필요, 명확성이 떨어짐

  • 순서도 : 정해진 기호를 이용하여 알고리즘을 알기 쉽게 표현

장: 글보다 쉽게 이해, 프로그램 설계 시 많이 사용

단: 기호에 대한 숙지

2.6 조건문

  • 조건문의 정의
  • 컴퓨터 과학에서의 조건문(=판단)

    : 사람의 몫 - 판단의 기준을 제시, 선택의 실행을 명령

    컴퓨터의 몫 - 판단의 기준에 따른 선택

  • 단순 if 문
  • if(조건식) {

     실행문장

    }

  • if-else 문

조건식이 false 일때 조건 검증

if (조건식) {

 실행문장

}

else {

실행문장

}

  • 다중 if-else 문

if (조건식) {

실행문장

}

else if (조건식2) {

 실행문장

}

else {

실행문장

}

  • 중첩 if-else 문
  • if문이나 if-else문, else문의 실행문장에 if문이나 if-else문을 중첩시킬 수 있다.
  • Switch 문
  • 식을 계산 한 후, 결과 값과 일치하는 case문으로 이동

  • 실행 문장 실행 후 break를 만나면 switch 벗어남

  • 실행 문장이 여러 개여도 {}로 묶지 않음

  • default는 생략 가능

  • break문이 없다면 break를 만나기 전까지 계속 실행됨

  • case 문의 값은 '정수 리터럴, 문자 리터럴, 문자열리터럴'만 가능 -> 변수나 식X

예제 2-1


public class HelloJava {
	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 s;
		char a;
		
		s=sum(i,10);
		a='?';
		System.out.println(a);
		System.out.println("Hello!");
		System.out.println(s);
	}
}

예제 2-3

public class CircleArea {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		final double PI = 3.14; //원주율
		double radius = 10.2; // 원의 반지름
		double circleArea= radius*radius*PI; //원의 면적 계산
		
		//원의 면적을 화면에 출력한다.
		System.out.print("반지름 "+ radius +",");
		System.out.println("원의 면적 = "+circleArea);
		
		//반지름 10.2, 원의 면적 =326.~
		
		}

}

예제 2-4


public class TypeConversion {

	public static void main(String[] args) {
		byte b=127;
		int i = 100;
		
		System.out.println(b+i); //227
		System.out.println(10/4); //2
		System.out.println(10.0/4); //2.5
		System.out.println((char)0x12340041); //A
		System.out.println((byte)(b+i)); //227을 byte형 크기만큼 자른다 -29
		System.out.println((int)2.9+1.8); //3.8
		System.out.println((int)(2.9+1.8)); //4
		System.out.println((int)2.9+(int)1.8); //3
	}

}

예제 2-5

import java.util.Scanner;

public class ScannerEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요.");
		Scanner scanner;
		scanner=new Scanner(System.in);
		String name;
		name=scanner.next();
		System.out.println("당신의 이름은 "+name+"입니다");
		String city=scanner.next();
		System.out.println("당신이 사는 도시는 "+city+"입니다");
		int age=scanner.nextInt();
		System.out.println("당신의 나이는 "+age+"살 입니다");
		double weight = scanner.nextDouble();
		System.out.println("당신의 체중은 "+weight+"kg 입니다");
		boolean single=scanner.nextBoolean();
		System.out.println("당신의 독신 여부는 "+single+"입니다.");
		
		scanner.close();
	
	}

}

예제 2-6

 

import java.util.Scanner;

public class ArithmeticOperator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		//scanner형 scanner에 해당하는 내용을 모두 넣음
		
		System.out.print("정수를 입력하세요:");
		int time = scanner.nextInt(); //정수입력
		int second = time % 60; //60으로 나눈 나머지는 초
		int minute = (time/60)%60; //60으로 나눈 몫을 다시 60으로 나눈 나머지는 분
		int hour = (time/60)/60; //60으로 나눈 몫을 다시 60으로 나눈 몫은 시간
		
		System.out.print(time+"초는 ");
		System.out.print(hour+"시간, ");
		System.out.print(minute+"분, ");
		System.out.print(second+"초입니다.");
		scanner.close();

	}

}

예제 2-7


public class AssignmentIncDecOperator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a=3,b=3,c=3;
		a+=3; //a=a+3=6
		b*=3; //b=b*3=9
		c%=2; //c=c%2=1
		System.out.println("a="+a+",b="+b+",c="+c);
		
		
		int d=3; //증감연산자 사례
		a=d++; //a=3, d=4
		System.out.println("a="+a+" ,d="+d);
		a=++d; //a=5, d=5
		System.out.println("a="+a+" ,d="+d);
		a=d--; //a=5, d=4
		System.out.println("a="+a+" ,d="+d);
		a=--d; //a=3, d=3
		System.out.println("a="+a+" ,d="+d);

	}

}

예제 2-8

public class logicalOperator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println('a'>'b'); //false
		System.out.println(3>=2); //True
		System.out.println(-1<0); //True
		System.out.println(3.45<=2); //False
		System.out.println(3==2); //False
		System.out.println(3!=2); //True
		System.out.println(!(3!=2)); //False
		System.out.println((3>2)&&(3>4)); //False
		System.out.println((3!=2)||(-1>0)); //True
		System.out.println((3!=2)^(-1>0)); //True

	}

}

예제 2-9

public class TernaryOperator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a=3, b=5;
	
		System.out.println("두 수의 차는 "+((a>b)?(a-b):(b-a)));

	}

}

예제 2-10


public class BitShiftOperator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		short a=(short)0x55ff;
		short b=(short)0x00ff;
		//비트연산
		System.out.println("[비트 연산 결과]");
		System.out.printf("%04x\n", (short)(a&b)); //비트 AND
		System.out.printf("%04x\n", (short)(a|b)); //비트 OR
		System.out.printf("%04x\n", (short)(a^b)); //비트 XOR
		System.out.printf("%04x\n", (short)(~a)); //비트 NOT
		
		byte c=20;
		byte d=-8;
		//시프트 연산
		System.out.println("[시프트 연산 결과]");
		System.out.println(c<<2); //c를 2비트 왼쪽 시프트
		System.out.println(c>>2); //c를 2비트 오른쪽 시프트. 0삽입
		System.out.println(d>>2); //d를 2비트 오른쪽 시프트. 1삽입
		System.out.printf("%x\n",(d>>>2)); //d를 2비트 오른쪽 시프트. 0삽입
		
		

	}

}

예제 2-11

import java.util.Scanner;

public class Twenties {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		
		System.out.print("나이를 입력하시오:");
		int age=scanner.nextInt();
		if((age>=20)&&(age<30)) {
			System.out.print("20대입니다. ");
			System.out.println("20대라서 행복합니다!");
		}
		else
			System.out.println("20대가 아닙니다.");
		
		scanner.close();
		}

예제 2-12

import java.util.Scanner;

public class Grading {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		char grade;
		Scanner scanner=new Scanner(System.in);
		
		System.out.print("점수를 입력하세요(0~100):");
		int score = scanner.nextInt(); //점수 읽기
		if(score>=90)
			grade='A';
		else if (score>=80)
			grade='B';
		else if (score>=70)
			grade='C';
		else if (score>=60)
			grade='D';
		else
			grade='F';
		
		System.out.println("학점은 "+grade+"입니다.");
		scanner.close();
	}
}

예제 2-13

import java.util.Scanner;

public class NestedIf {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		System.out.print("점수를 입력하세요(0~100):");
		int score=scanner.nextInt();
		System.out.print("학년을 입력하세요(1~4):");
		int year=scanner.nextInt();
		
		if(score>=60) {
			if(year!=4)
				System.out.println("합격!");
			else if(score>=70)
				System.out.println("합격!");
			else
				System.out.println("불합격!");
		}
		else 
			System.out.println("불합격!");
		
		scanner.close();
	}

}

예제 2-14

import java.util.Scanner;

public class Season {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		
		System.out.print("월(1~12)을 입력하시오:");
		int month=scanner.nextInt();
		switch (month) {
		case 3:
		case 4:
		case 5:
			System.out.println("봄입니다.");
			break;
		case 6: case 7: case 8:
			System.out.println("여름입니다.");
			break;
		case 9: case 10: case 11:
			System.out.println("가을입니다.");
			break;	
		case 12: case 1: case 2:
			System.out.println("겨울입니다.");
			break;
		default:
			System.out.println("잘못된 입력입니다.");
		}
		scanner.close();
	}

}

0개의 댓글