# 2. Java 2일차(230816) [국비교육]

brand_mins·2023년 8월 16일

Java

목록 보기
2/47

1. 자료형

  • 프로그램 실행 목적: 현실세계의 데이터를 컴퓨터에 넣어 가공 처리하여 사용자가 필요할때 원하는 결과를 보여줌.

  • 현실세계의 데이터를 컴퓨터에서 쉽게 사용할 수 있도록 미리 약속된 데이터 종류.

(1) 정수형(byte, short, int, long)

  • 정수형은 소수점이 없는 수를 의미함.
  • 해당 타입이 표현할 수 있는 범위를 벗어나면 오버플로우 발생.
    • 오버플로우: 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할때 발생함.
    • 언더플로우: 해당 타입이 표현할 수 있는 최소 범위보다 적은 수를 저장할때 발생함.
  • 대부분 실무에서는 int형 일반적으로 사용하는 편임.
  • int형은 앞에 아무것도 안붙으면 10진수, 0이 붙으면 8진수, 0x가 붙으면 16진수, 0b가 오면 2진수임.
int i1 = 15;
int i2 = 015;
int i3 = 0x25;
int i4 = 0b0501;
public class IntegerLiteralExample {
	public static void main(String[] args) {
    	int var1 = 0b1011;
        int var2 = 0206;
        int var3 = 365;
        int var4 = 0xB3;
        System.out.println("var1: " + var1);
        System.out.println("var2: " + var2);
        System.out.println("var3: " + var3);
        System.out.println("var4: " + var4);
        }
     }
  • long형은 소수점이 없는 숫자지만 숫자옆에l,L 붙이면 long타입.
System.out.println(1000000L);
리턴 타입메소드 이름내용
byte[]getBytes()byte[]로 리턴
byte[]getBytes(Object anObject)두 문자열 비교
intindexOf(String str)문자열 내에서 주어진 문자열 위치를 리턴
intlength()총 문자수 리턴

  • indexOf() 예제
String subject = "자바 프로그래밍";
int index = subject.indexOf("프로그래밍");
  • 이 예문은 if문 조건식에서 특정 문자열 포함되어 있는지 여부 확인.
if(문자열.indexOf("찾는 문자열") != 1 {
	// 포함되어 있는 경우
 } else {
 	// 포함되어 있지 않은 경우
 }

(2) 실수형(float,double)

  • 소수점이 있는 수를 의미함.
  • 하드웨어 발달로 인해 double형 많이 사용함.
  • float형은 숫자 끝에 f를 붙이고 double형은 붙이지 않는다.
  • float형은 지수와 가수부분이 더 작고 double형이 더 큼.
public class IntegerLiteralExample {
	public static void main(String[] args) {
    	float var1 = 0.123456789012345678f;
		double var2 = 0.1234567890123456789;
		System.out.println("var1: " + var1);
		System.out.println("var2: " + var2);
        // 10의 거듭제곱 리터럴
		double var3 = 3e6; // 3.0 * 10^6
		float var4 = 3e6F;
		double var5 = 2e-3; // 2.0 * 10^-3
		System.out.println("var3: " + var3);
		System.out.println("var4: " + var4);
		System.out.println("var5: " + var5);
        }
     }

(3) 문자 상수:char

  • 작은 정수나 문자 하나를 표현할 수 있는 타입.
  • 컴퓨터는 2진수 밖에 인식하지 못하여 문자도 숫자로 표현해야 인식.
  • 자바에서는 유니코드(각 나라 모든 언어 표현) 사용.
  • 아스키코드 : 영문자와 숫자밖에 표현하지 못함.
  • char은 ''로 묶어서 사용함.
  • \u 다음 유니코드에 해당하는 16진수를 넣어 문자출력
System.out.println('\u0041'); // A

public class CharExample {
	public static void main(String[] args) {
    	char c1 = 'A';
        char c2 = 65;
        char c3 = '가';
        char c4 = 44032;
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        }
    }
리턴 타입메소드 이름내용
charcharAt(int index)특정 위치의 문자를 리턴
String subject = "자바 프로그래밍";
char charValue = subject.charAt(3);
  • 문자열은 0부터 시작하여 3번째인 '프'가 출력됨.
  • 인덱스는 0부터 '문자열길이-1'까지의 번호를 말함.

(4) 문자열: String

  • 문자열의 추출, 비교, 찾기 등 다양한 메소드를 가짐.
  • 문자열 상수는 ""로 묶어서 만들 수 있음.
리턴 타입메소드 이름내용
StringsubString(int beginIndex)beginIndex 위치에서 끝까지 잘라낸 새로운 문자열 리턴
StringsubString(int beginIndex, int endIndex)beginIndex 위치에서 endIndex전까지 잘라낸 새로운 문자열 리턴
StringtoLowerCase()알파벳 소문자로 변환한 새로운 문자열 리턴
StringtoUpperCase()알파벳 대문자로 변환한 새로운 문자열 리턴
Stringtrim()앞뒤 공백을 제거한 새로운 문자열 리턴
Stringvalueof(int i/double d)기본 타입 값을 문자열로 리턴
  • 문자열 잘라내기(subString())
    • 주어진 인덱스에서 문자열 추출.
String ssn = "880815-1234567";
String firstNum = ssn.substring(0,6); // 880815
String secondNum = ssn.substring(7); // 1234567
  • 알파벳 소/대문자 변경(toLowerCase(), toUpperCase())
String original = "Java Programming";
String lowerCase = original.toLowerCase(); // java programming
String upperCase = orginal.toUpperCase(); // JAVA PROGRAMMING
  • 알파벳 앞뒤 공백 잘라내기(trim())
String oldStr = " 자바 프로그래밍 ";
String newStr = oldStr.trim();
  • 문자열 변환(valueOf())
static String valueOf(boolean b);
static String valueOf(int i);

  • 문자열 예제 - 이스케이프 문자 활용
public class StringExample {
	public static void main(String[] args) {
    	String name = "홍길동";
        String job = "프로그래머";
        System.out.println(name);
        System.out.println(job);
        String str = "나는 \"자바\"를 배웁니다.";
        System.out.println(str);
        str = "번호\t이름\t직업";
        System.out.println(str);
        System.out.println("나는\n");
        System.out.println("자바를\n");
        System.out.println("배웁니다.");
        }
    }

(5) 논리형 타입

  • 논리형은 참이나 거짓 중 하나를 가질 수 있는 타입.
  • boolean형은 true, false값 밖에 가질 수 없음.

(6) 심볼릭 상수

  • 복잡한 데이터를 문자로 표현하는 방법.
  • 심볼릭 상수는 모두 대문자로 기술하고 새로운 의미 단어가 추가될때 _ 기호 사용.

(7) 진수

  • 진수는 수를 표현하는 여러가지 방법(2진수,8진수,10진수,16진수)
    • 2진수 : 0~1 2개의 문자를 가지고 수를 표현함.
    • 8진수 : 0~7 8개의 문자를 가지고 수를 표현함.
    • 10진수 : 현실세계에서 사용하고 있는 숫자
    • 16진수 : 0~9, A~F까지 사용함.
  • 인코딩: 현실 세계의 데이터를 코드화, 암호화하는 과정
  • 디코딩: 암호화된 데이터를 현실세계의 변환하는 과정
  • 코드표: 약속된 기호를 기록한 표임.

(8) 컴퓨터 저장단위

  • 0과 1를 저장할 수 있는 단위를 비트라고 함.
  • 1bit는 0과 1 둘중 하나를 저장할 수 있는 공간인데 그것이 8개가 되어 1바이트로 구성됨.
  • 2bit는 0과 1 둘중 하나를 저장할 수 있는 공간이 2개.
  • 1024 byte = 1kbyte, 1024kbyte = 1mbyte
  • 1024 mbyte = 1gbyte, 1024 gbyte= 1tbyte
  • 즉, 바이트 > 킬로바이트 > 메가바이트 > 기가바이트 > 테라바이트 순서다.

2. 변수

  • 변수는 하나의 값으로 저장할 수 있는 메모리 번지수 이름. 즉, 변할 수 있는 수를 의미함.
  • 변수를 사용하는 이유: 메모리 저장공간에서 데이터 식별과 저장공간을 확보.
  • 변수를 2개 사용할 수 없는 이유
    • 변수는 식별자이기 때문에 같은 식별자가 2개가 될 수 없음.

(1) 변수를 선언하는 방법

  1. 자료형 변수명 = 자료형에 속하는 상수;
  2. 자료형 변수명;
    변수명 = 자료형에 속하는 상수;

(2) = 연산자

  • = 연산자는 할당연산자라고 함.
    • 예: a=20; 20이라는 숫자가 a라는 공간으로 들어감.

(3) 실습

byte a1=10;
byte a2;
a2 = 11;
System.out.println(a1);
System.out.println(a2);
System.out.println(a1+a2);
System.out.println(a1+1);
short a1=10;
short a2;
a2 = 11;
System.out.println(a1);
System.out.println(a2);
System.out.println(a1+a2);
System.out.println(a1+1);
int a1=10;
int a2;
a2 = 11;
System.out.println(a1);
System.out.println(a2);
System.out.println(a1+a2);
System.out.println(a1+1);
long a1=10L;
long a2;
a2 = 11L;
System.out.println(a1);
System.out.println(a2);
System.out.println(a1+a2);
System.out.println(a1+1);

float a1=10.23f;
float a2;
a2 = 11.f;
System.out.println(a1);
System.out.println(a2);
System.out.println(a1+a2);
System.out.println(a1+1.4f);

double a1=10.23;
double a2;
a2=11.94;
System.out.println(a1);
System.out.println(a2);
System.out.println(a1+a2);
System.out.println(a1+10.4);

  • 문자열 클래스 : String(참조형 자료형)
String st1 = "hello";
String st2= "world";
System.out.println(st1);
System.out.println(st1 + "world");
System.out.println(st1+st2);
String str3= st1+st2;
System.out.println(str3);

<이것은 자바다> 실습

package ch02.sec01;
public class VariableUseExample {
	public static void main(String[] args) {
		int hour = 3;
		int minute = 5;
		System.out.println(hour + "시간 " + minute + "분");
		int totalMinute = (hour*60) + minute;
		System.out.println(totalMinute);
	}
}
  • 두 변수의 값을 교환하는 방법
package ch02.sec01;
public class VariableExchangeExample {
	public static void main(String[] args) {
		int x = 3;
		int y = 5;
		System.out.println("x: " + x + ", y: " + y);
		int temp = x;
		x = y;
		y = temp;
		System.out.println("x: " + x + ", y: " + y);
	}
}

3. 변수이름 짓기

(1) 변수이름 짓기

1) 대소문자 구분하기
2) int double과 같은 예약어(키워드) 사용x
3) 숫자로 시작x
4) 특수문자 _, $ 두가지만 허용되지만 되도록 사용x
5) 이미 선언된 식별자, 메소드명 사용x
6) 나중에 배울 메소드와 클래스 배열 등도 변수 명명법에 따름.

1] 관용적 규칙

  • 변수명은 소문자로 시작
    • 여러 단어로 구성될 경우 단어의 첫번째 알파벳을 대문자로 기술.
int catAge=12;
  • 클래스는 대문자로 시작.
    • 여러 단어로 구성될 경우 단어의 첫번째 알파벳을 대문자로 기술.
public class MyCat{}
  • 패키지는 모두 소문자 사용.
package com.human.ex
  • 상수로 선언하여 사용할 때 모두 대문자로 기술.
  • 새로운 단어가 나올때마다 _로 구성.
public static final String IP_ADDRESS = "123.456.789.101";
public static final String SITE_NAME = "네이버쇼핑몰생활용품";
public static final double PI = 3.14;

4. 다양한 연산자

  • 여러 종류의 연산을 수행하기 위해 다양한 연산자 제공.

(1) 산술연산자

  • 산술연산자는 +, -, *, /, %와 같이 숫자 연산과 관련된 연산자.
  • 즉, 2개의 데이터를 가지고 연산함.
int num1 = 8; num2 = 4;
System.out.println("+ 연산자에 의한 결과 :" + (num1 + num2));
System.out.println("- 연산자에 의한 결과 :" + (num1 - num2));
System.out.println("* 연산자에 의한 결과 :" + (num1 * num2));
System.out.println("/ 연산자에 의한 결과 :" + (num1 / num2));
System.out.println("% 연산자에 의한 결과 :" + (num1 % num2));
  • 산술 연산의 특징은 다음과 같다
    • 피연산자가 정수(byte, short, char, int) 타입이면 연산의 결과는 int타입
    • 피연산자가 정수타입이고 그 중 하나가 long타입이면 연산의 결과는 long타입
    • 피연산자 중 하나가 실수타입이면 연산의 결과는 실수타입.
public class ArithmeticOperatorExample {
	public static void main(String[] args) {
    	byte v1 = 10;
		byte v2 = 4;
		int v3 = 5;
		long v4 = 10L;
        int result1 = v1 + v2;
		System.out.println("result1: " + result1);
        long result2 = v1 + v2 - v4;
		System.out.println("result2: " + result2);
        double result3 = (double) v1 / v2;
		System.out.println("result3: " + result3);
        int result4 = v1 % v2;
		System.out.println("result4: " + result4);
        }
  }

1) 연산자 우선순 기초실행순서


1. () 괄호가 우선순위 높음
2. *, /, %가 +,- 보다 우선순위 높음
3. 우선순위가 같으면 왼쪽에서부터 실행.

(2) 비교연산자

  • 피연산자 사이의 상대적인 크기를 판단하는 연산자
  • 비교연산자는 흐름 제어문인 조건문(if), 반복문(for,while)에서 실행흐름을 제어할때 주로 사용.
비교 연산자내용
==왼쪽 피연산자와 오른쪽 피연산자가 같으면 참
!=왼쪽 피연산자와 오른쪽 피연산자가 같지 않으면 참
>왼쪽 피연산자가 오른쪽 피연산자보다 크면 참
>=왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 참
<왼쪽 피연산자가 오른쪽 피연산자보다 작으면 참
<=왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 참
char c1= 'a';
char c2 = 'b';
System.out.println("== 연산자에 의한 결과: " + (c1==c2));
System.out.println("!= 연산자에 의한 결과: " + (c1!=c2));
System.out.println("> 연산자에 의한 결과: " + (c1>c2));
System.out.println(">= 연산자에 의한 결과: " + (c1>=c2));
System.out.println("< 연산자에 의한 결과: " + (c1<c2));
System.out.println("<= 연산자에 의한 결과: " + (c1<=c2));
  • 예외
  • 0.1f == 0.1에서 0.1f가 double타입으로 변환될 경우 0.1 == 0.1 이라고 생각하겠지만 false다.
    • 이유: 부동소수점 방식을 사용하는 실수타입은 0.1을 정확히 표현이 불가함.
    • 해결책 : 0.1f == (float)0.1 : true
  • 문자열 비교할때 동등(==, !=)연산자 대신 equals(), !equals() 함수 사용
boolean result = str1(원본 문자열).equals(str2(비교 문자열));
boolean result = ! str1.equals(str2);

(3) 논리연산자

  • 논리연산자는 주어진 논리식을 판단하여 참과 거짓을 결정하는 연산자.
  • 논리연산자는 조건문(if), 반복문(for,while) 등에서 주로 사용
논리 연산자내용
&&(논리곱)논리식이 모두 참이면 참 반환
ll(논리합)논리식 중에서 하나라도 참이면 참
!(논리부정)논리식 결과가 참이면 거짓, 거짓이면 참

char c1='b';
char c2='B';
boolean result1, result2;
result = (c1>'a') && (c1 < 'z');
System.out.println(result);

(4) 증감연산자

  • 증감연산자는 피연산자를 1씩 증가 혹은 감소할 때 사용하는 연산자
대입 연산자내용
++x먼저 피연산자의 값을 1증가시킨 후 해당연산 진행
x++먼저 해당 연산을 수행하고 피연산자의 값을 1 증가시킴
--x먼저 피연산자의 값을 1감소하고 해당 연산 진행
x--먼저 해당 연산을 수행하고 피연산자 값 1 감소
int num1 = 7;
int num2 = 7;
int result1, result2;
result1 = --num1 + 4;
result2 = num2-- + 4;
System.out.println("전위 감소 연산자에 의한 결과 : "+ result1 + ", 변수의 값 : " + num1);
System.out.println("후위 감소 연산자에 의한 결과 : "+ result2 + ", 변수의 값 : " + num2);
  • result1: 10, num1 : 6
  • result2: 11, num2: 6

int x = 10;
int y = x-- + 5 + --x;
System.out.println("x: " + x + ", y: " + y);
  • x = 8, y = 23
    <풀이: 완벽히 이해하면 지우기>

<예제>

public class IncreaseDecreaseOperatorExample {
	public static void main(String[] args) {
    	int x = 10;
		int y = 10;
		int z;
        x++;
		++x;
		System.out.println("x= " + x);
        System.out.println("---------------------");
		y--;
		--y;
		System.out.println("y= " + y);
		System.out.println("---------------------");
        z = x++;
		System.out.println("z=" + z);
		System.out.println("x=" + x);
        System.out.println("---------------------");
		z = ++x;
		System.out.println("z=" + z);
		System.out.println("x=" + x);
        System.out.println("---------------------");
		z = ++x + y++;
		System.out.println("z=" + z);
		System.out.println("x=" + x);
		System.out.println("y=" + y);
        }
    }

(5) 대입연산자

  • 변수에 값을 대입할 때 사용하는 이항연산자.
  • 피연산자들의 결합방향은 오른쪽에서 왼쪽.
대입 연산자내용
=왼쪽의 피연산자에 오른쪽 피연산자 대입
+=왼쪽의 피연산자에 오른쪽 피연산자와 더한 후 왼쪽 피연산자에 대입
-=왼쪽의 피연산자에 오른쪽 피연산자와 뺀 후 왼쪽 피연산자에 대입
*=왼쪽의 피연산자에 오른쪽 피연산자와 곱한 후 왼쪽 피연산자에 대입
/=왼쪽의 피연산자에 오른쪽 피연산자와 나눈 후 왼쪽 피연산자에 대입
%=왼쪽의 피연산자에 오른쪽 피연산자와 더한 후 나머지값을 왼쪽 피연산자에 대입

public class AssignmentOperatorExample {
	public static void main(String[] args) {
    	int result = 0;
		result += 10;
		System.out.println("result=" + result);
		result -= 5;
		System.out.println("result=" + result);
		result *= 3;
		System.out.println("result=" + result);
		result /= 5;
		System.out.println("result=" + result);
		result %= 3;
		System.out.println("result=" + result);
        }
   }

(6) 삼항연산자

  • 삼항연산자는 피연산자가 3개인 형태를 말한다.
  • 즉, 조건식이 true이면 true식이 출력되고 false이면 false식이 출력된다.
  • 삼항연산자(피연산자? 피연산자: 피연산자).
  • ? 앞의 피연산자는 boolean 변수 또는 조건식이 오므로 조건 연산자라고 함.
a=true? 1:0; // a=1
a=false? 1:0; // a=0

public class JavaStart00 {
	public static void main(String[] args) {
    	int a = 6;
        a = a+3;
        System.out.println(a);
        }
    }

public class JavaStart00 {
	public static void main(String[] args) {
    	int a = 5;
        int b = 6;
        int sum = a + b;
        System.out.println(sum);
        int a = 7;
        int sum = a + b;
        System.out.println(sum);
        }
    }
profile
IT 개발자가 되기 위한 기록

0개의 댓글