[JAVA기초] 국비 7일차

포키·2022년 9월 28일
0

국비과정

목록 보기
7/73

TIP
연산의 우선순위가 헷갈린다면, 괄호를 이용하여 순서를 확실히 결정해둔다.

  • 변수를 사용하는 이유
    : 중복(값, 연산) 소거 (-> 수정 편리, 효율 극대화, 오차 최소화)
  • 개발 과정
    요구사항 수집 - 요구사항 분석 - 설계 - 개발 - 배포
  • 배포는 요구사항이 충족되었는지 확인하고 수정하는 과정을 포함함. 때문에 비용이 가장 많이 들어감. 배포 중 개발 파트는 마찬가지로 인력 가치 낮음.
  • 무엇이 필요한지, 어떻게 요구를 충족시킬지, 변경 사항을 어떻게 반영하고, 오류를 어떻게 보완하는가. 이런 부분은 대체 불가능한 업무 (부가가치가 높은) 이며 이를 지향해야 한다.
    반대로 단순 개발은 쉽게 대체될 수 있기에 그만큼 평가가 낮다.

자료형 data type

1. 참조형 reference type - 무한대
클래스, 객체 학습하며 배움

2. 기초형(기본데이터형) primitive type - 8개

  • 정수를 적으면 기본 int 취급 -> 'L' 붙여야 long
  • 실수를 적으면 기본 double 취급 -> 'f' 붙여야 float

    ex) 3은 기본 int, 3L로 적으면 long
    ex2) 0.1은 기본 double, 0.1f로 적으면 float

ex)
boolean flag = true;
char c = 'b';
long n = 3L;
float m = 3.14f;
  • 진수 표기법
    10진수: 14, 16, 17
    8진수: 012, 013, 014
    16진수: 0xe, 0x10, 0x11 - rgb 색상 코드에 나온다
    2진수: 0b1100
    버전 7부터 2진수와 밑줄기호(구분용)의 사용이 가능함 (데이터로 저장되지 않고 무시됨)
  • p.60 예제
public class AreaTest {
	public static void main(String[] args){
		final double PI = 3.141592;
		double radius;
		double area;
		//선언은 줄 나눠서 하기
		radius = 5.0;
		area = PI * radius * radius;
		System.out.println("반지름이 5인 원의 면적은 " + area);
	}
}
  • String class : 문자열 자료형. 기본데이터형이 아닌 클래스의 일종.

형변환

: 자동적으로 또는 강제적으로 자료형을 변환하는 것.
기본적으로 작은 범위에서 큰 범위로 맞춰진다.

자동 형변환

byte b = 1; // b는 byte의 1
int n = b; // n은 int의 1
byte other = n; // error, int 1은 byte에 담길 수 없음


강제 형변환

byte other = (byte) n; // 데이터의 '누수'를 감당할 수 있다면 강제적으로 형변환도 가능하다.
  • 전형적으로 쓰이는 형변환
byte < char < int < double
  • char는 컴퓨터에 숫자로 저장됨 (아스키 코드)(문자열은 숫자 아님)
class CharEx {
	public static void main(String[] args){
		char c = 'a';
		System.out.println(c + 1);
	}
}
//결과는 98, char 'a'의 값은 97.
  • 자료형은 연산 과정에서 가장 큰 범위의 자료형으로 자동 형변환된다.
class TypeEx {
	public static void main(String[] args){
		int num1 = 4;
		int num2 = 5;
		double num3 = 5.0;
		System.out.println(num1 / num2); // int와 int의 연산이므로 결과는 int, '0'
		System.out.println(num1 / num3); // int와 double의 연산이므로 결과는 double, '0.8'
	}
}

p. 62 예제

public class TypeConversion {
	public static void main(String[] args){
		int i;
		double f;

		f = 1 / 5; // int와 int의 연산
		System.out.println(f);

		f = (double) 1 / 5; // double과 int의 연산 (형변환 우선)
		System.out.println(f);

		i = (int) 1.7 + (int) 1.8; // int와 int의 연산 (형변환 우선)
		System.out.println(i);
	}
}

강제 형변환은 조심해야 한다.
ex) byte 128 => -128, byte 129 => -127 같은 식으로 완전히 다른 값이 나올 수 있음.
언제나 누수 주의. 컴퓨터가 인지하는 값은 2진수 - 어쩔 수 없는 차이가 있다는 것 인지.

콘솔에서 입력받기

import java.util.Scanner;

public class Add2 {
	public static void main(String[] args){	
		Scanner sc = new Scanner(System.in);
		int x;
        int y;
        int sum;

		System.out.print("첫 번째 숫자를 입력하시오: ");
		x = sc.nextInt();

		System.out.print("두 번째 숫자를 입력하시오: ");
		y = sc.nextInt();

		sum = x + y;
		System.out.println(sum);
	}
}

import 명령어

import java.util.Scanner;
  1. 어디서? CLASSPATH의 rt.jar

    윈도우 환경변수
    JAVA_HOME -> c:...\jdk; d:...\jdk
    CLASSPATH : %JAVA_HOME%\jre\lib\rt.jar;.
    PATH : %JAVA_HOME%\bin
    환경변수는 마치 해당 폴더의 파일들이 지금 실행중인 폴더에 함께 있는 것처럼, 위치가 같은 것처럼 이용할 수 있게 한다.
    ; 문장(주소)구분자 - 환경변수는 값을 여러개 가질 수 있다 (순서대로 확인한다)
    . 상대위치 (수행하고자 하는 위치) - c드라이브에서 실행중이면 c드라이브쪽 주소를 사용해준다.
    %이름% 환경변수 이름의 주소
    classpath 모든 클래스를 class에서 찾는다.
    rt.jar api, 라이브러리가 들어있는 파일. 자바 아카이브 파일(압축파일).
    bin 2진수 파일이 들어있는 곳 = 실행 파일 (why? 기계가 바로 알아들을 수 있는 파일이니까)

  2. 무엇을? java.util.Scanner
    (= java, util이란 패키지의 Scanner 클래스.)

패키지
같은 이름을 가진 클래스(파일)을 구분하기 위해 디렉토리별로 나누어 넣어놓는다.
이때 디렉토리를 패키지라고 한다.
패키지.클래스명 (ex) java.util.Scanner) 을 풀패키지라고 한다.
패키지명 또한 중복될 수 있으며, 이를 막기 위해 일반적으로 도메인을 뒤집어 패키지에 사용한다. (도메인은 중복이 불가능하므로 적절함.)

왜 Scanner는 inport가 필요한가? (왜 String, System은 필요 없는가?)
컴파일 과정에서 코드의 맨 위에는 import java.lang.*가 추가되게 된다.
String과 System은 필수핵심무조건매번쓰는클래스모음인 java.lang 패키지 안에 들어있다.
Scanner는 java.util 패키지 안에 들어있다.

import 할 때는 *를 쓰기보다 사용할 클래스를 명시적으로 밝혀주는 것이 좋다.
동료 개발자들이 코드를 보고 빠르게 이해하는 데 도움이 된다.

Scanner 클래스

		Scanner sc = new Scanner(System.in);

참조형 Scanner 클래스의 선언 / 내용은 'new 클래스명()'
Scanner 클래스는 '키보드(표준입력장치)를 읽어들이는 기능'을 한다.

		System.out.print("첫 번째 숫자를 입력하시오: ");

실행하면 텍스트 뒤에 커서가 깜빡인다.

		x = sc.nextInt();

키보드에 입력된 값을 들고와라 (문자열로) / int의 형태로 가져와라

  • 8 입력 -> (복잡한 과정) -> "8" -> int 8로 변환

참고

profile
welcome

0개의 댓글