[Java] 기본 - 명명규칙, 데이터타입, 연산자, 메모리, 제어문, 패키지, 배열

devheyrin·2022년 8월 26일
1

JavaBasic

목록 보기
1/6

JAVA 명명규칙

기본 명명 규칙

  • 길이 제한 없음
  • 예약어 사용 안됨
  • 숫자로 시작할 수 없음
  • 특수문자는 _ $만 사용 가능

권장사항

  • Pascal Casing : 첫 글자는 대문자, 여러 단어로 이루어진 경우 단어의 첫글자는 대문자 (클래스명)
  • Camel Casing : 첫 글자는 소문자, 여러 단어로 이루어진 경우 단어의 첫글자는 대문자 (변수, 메소드명)
  • 상수형 변수(변하지 않는 값 자체) : 전부 대문자, 여러 단어가 연결된 경우 _로 구분
    • APPLE_PRICE = 10000

데이터 타입

primitive, 기본형 : 8개

  • 논리형 : boolean(1bit)
  • 문자형 : char(2byte)
  • 정수형 : byte(1byte), short(2byte), int(4byte), long(8byte), char(2byte)
    • char 도 정수형이다 (’A’ == 65, ‘a’ == 97)
  • 실수형 : float(4), double(8)
char a = 'a';
System.out.println(a); // a
System.out.println((int)a); // 97
		
int b = 98;
System.out.println(b); // 98
System.out.println((char)b); // b
  • 자동 형변환
    • 작은 크기 타입 → 큰 크기 타입으로 자동 형 변환
    • 정수형 → 실수형으로 자동 형 변환
int intValue = (int) 3.0;
float floatValue = (float)3.0; 
System.out.println(intValue); // 3
System.out.println(floatValue); // 3.0
		
double doubleValue = 10; 
System.out.println(doubleValue); // 10.0 

byte byteNum1 = 10;
byte byteNum2 = 20;

byte intResult = byteNum1 + byteNum2; // 컴파일 오류 발생! 

// byte+byte 타입은 자동으로 int+int로 변환되므로
// 변수의 데이터타입이 byte가 아닌 int여야함.

reference, 참조형

  • 클래스, 배열

연산자

종류연산자
증감++, —
산술+, -, *, /, %
비교>, <. ≥, ≤, ==, ≠
논리&&,
조건(조건)? (참) : (거짓) (삼항연산자)
대입=, *=, /=, +=, -=

대입 연산

  • LV *= RV
  • LV : 변수만 올 수 있음
  • RV : 변수, 값이 올 수 있음
  • 더하기 연산과 연결 연산
System.out.println("3+4 = " + (3 + 4)); // 더하기 연산 
System.out.println("3+4 = " + 3 + 4); // 연결 연산
System.out.println("3*4 = " + 3 * 4);

논리 연산

int i = 3;
if (i > 3 && ++i > 3) {
	// 앞의 조건(i > 3) 이 거짓이므로 뒤 조건은 평가하지 않는다. 
	System.out.println("조건 만족");
}
System.out.println(i); // 3 - 증감 연산이 수행되지 않아 3 

if (i > 1 || ++i > 3) {
	// 앞의 조건(i > 3) 이 참이므로 뒤 조건은 평가하지 않는다. 
	System.out.println("조건 만족");
}
System.out.println("i = " + i); // 3 - 증감 연산이 수행되지 않아 3

삼항 연산

// 삼항 연산자 
int j = 30;
int k = 25;
int m = (j > k) ? j : k;
System.out.println("큰 값: " + m); // 30
💡 short, byte 처럼 작은 정수타입은 왜 쓸까?
음악, 사진과 같은 멀티미디어 정보는 조회만 해도 변환작업이 일어난다. 데이터 변환을 빨리 하기 위해서 멀티미디어 정보를 저장할때는 0과 1로만 저장한다! ⇒ 기본 처리 단위가 바이트단위이므로, 처리를 빨리하기 위해 short, byte 타입 사용

메모리

  • static, non-instance
    • 고정 공간
    • 실행 중에 가져다 쓸 수 있는 모든 것이 저장된다. ex) main( )
  • stack
    • 모든 변수가 저장되는 공간
    • 자신의 제어블럭을 벗어나는 순간 변수는 stack에서 사라진다.
  • heap, instance
    • 모든 객체가 저장되는 공간

데이터 타입과 객체

  • 기본형 변수 : 데이터 ‘값’이 저장된다.
  • 참조형 변수 : heap공간에 저장된 객체의 ‘주소’가 저장된다.

바이트별 실제 숫자 유효범위

byte음수 유효범위양수 유효범위
1-128 ~ 00 ~ 127
2-32768 ~ 00 ~ 32767
4-21억4748만3628 ~ 00 ~ 21억 4748만 3647
8-9,223,372,036,854,775,808 ~ 00 ~ 9,223,372,036,854,775,807

제어문

if / else if / else

switch / case / default

switch (정수형 or 실수형 변수) {
	case1:
		명령1;
		break;
	case2:
		명령2:
		break;
	default: (else와 같은 역할, 생략가능) 
		명령; 
}

패키지

Calendar

import java.util.Calendar; // package import
Calendar c = Calendar.getInstance(); // 객체 생성 
int year = c.get(Calendar.YEAR); // 연도 얻기 
  • 패키지 : 실제 물리적인 저장소 (탐색기와 동일)
  • 현재 속해 있는 패키지 : java.lang.*
  • 다른 패키지에 있는 클래스(라이브러리)를 사용하려면 import 명령으로 사용할 패키지(클래스)를 명시해주어야 한다.
  • package 명령은 자바 파일 가장 첫 줄에 사용한다. (한 번만 사용, 하나의 파일은 하나의 패키지에만 소속된다.)
  • import 명령은 횟수 제한 없다. (사용할 클래스를 가진 패키지는 여러 개 일 수 있다.)

Scanner

import java.util.Scanner;

Scanner scan = new Scanner(System.in); 
String id = scan.nextLine(); 
  • new : 힙 에다가 이 클래스를 '객체화' 시켜라

    💡 new 를 쓰는 것과 안 쓰는 것의 차이?
    많이 쓰이는 객체를 getInstance 라는 객체로 만들어놓으면, 모든 사람들이 객체로 가는 고속도로(주소)를 공유할 수 있게 된다.
    getInstance 의 목적 (자체적으로 new 를 가짐)
    1. 보안 목적 - new 남발하지 못하도록
    2. 많이 쓰이는 객체인 경우 한번 만들어 두고 재사용

  • System.outSystem.in
    • System.out : 표준출력장치, 모니터를 의미
    • System.in : 표준입력장치, 키보드를 의미
  • scan.nextLine()
    • String으로 읽어오기 위해 nextLine사용
  • scan.nextInt()
    • 정수를 읽어올 때는 nextInt 사용

배열

새 패키지 만들기

  • src > 우클릭 > new > package
  • 새로 만든 패키지는 src 아래의 폴더가 된다.

Array (배열)

  • 같은 종류(Data type)의 여러 데이터를 하나의 객체로 관리
  • 배열 안의 데이터는 모두 같은 데이터타입이어야 한다.
  • 즉, 모든 방에 같은 종류의 데이터가 있다.

배열 선언, 초기화, 출력

int[] arr = new int[10];
// int[] arr = {1, 2, 3, 4, 5}; 
// 선언과 초기화를 동시에 할 수도 있지만, 객체지향언어에서는 지양하는 방법이다. 
for (int i=0; i < arr.length; i++) {
			arr[i] = i+1;
}
  • int[] - int 형 배열
  • int[10] - 배열의 크기를 10으로 설정
  • arr.length - 배열의 크기

main(String[] args)

public static void main(String[] args) {
		System.out.println(args[0]);
		System.out.println(args[1]);
		
		for (int i=0; i< args.length; i++) {
			System.out.print(args[i] + "\t" + args[i].length());
			System.out.println();
		}
	}
  • String[] args - 실행 시 받는 인자로, String 타입의 배열!
  • args[i].length() - 배열의 i번째 원소 길이를 구한다.

Program arguments 설정하기

  1. 이클립스
  • java파일에서 우클릭 > run configurations > Arguments > 원하는 인자 넣기 > Apply > run
  • 띄어쓰기가 포함되어있다면 큰따옴표로 묶기

  1. CMD
  • java 패키지명.클래스명 arguments
D:\works\java\FirstJava\bin>java array.ArrayEx02 사과 바나나 "샤인 머스캣"
사과
바나나
사과    2
바나나  3
샤인 머스캣     6

향상된 for문

  • 자료구조객체와 for문 사용하는경우, 성능에 좋은 영향을 준다.
for (String str:args) {
			System.out.println(str);
			System.out.println(str.length());
}
// 출력결과 
사과
2
멜론
2
몽키 바나나
6

로또 예제

  • 풀이 방법
    1. 45크기의 int타입 배열 생성
    2. 배열을 1-45로 초기화
    3. 0-44중에서 랜덤한 숫자 하나 추출(방번호)
    4. 랜덤하게 뽑은 방번호에 들어있는 값을 0번째 방에 들어있는 값과 교환
    5. 1000번 반복
    6. 완성된 배열의 앞에서부터 6개 추출
public class Lotto {
	public static void main(String[] args) {
		int[] intArr = new int[45];
		for (int i=0; i<intArr.length; i++) {
			intArr[i] = i+1;
		}
		
		for (int i=0; i<1000; i++) {
			// 1부터 44까지의 임의의 숫자 뽑기  
			int random = (int) (Math.random() * 44) + 1;
			int first_num = intArr[0];
			intArr[0] = intArr[random];
			intArr[random] = first_num; 
		}
		for (int i=0; i<6; i++) {
			System.out.println(intArr[i]);
		}
	
	}

}

게임 만들기 연습

가위바위보 게임

import java.util.Scanner;

public class RSP {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String man;
		String woman;
		Scanner sc = null; // 선언은 반복문 밖에서 하는 것이 좋다.  
		
		while (true) {
			sc = new Scanner(System.in);
			System.out.println("가위바위보중 하나를 입력: ");
			System.out.println("하녕: ");
			man = sc.nextLine();
			System.out.println("유진: ");
			woman = sc.nextLine();
			
			if (man.equals(woman)) {
				System.out.println("비겼습니다! 게임 재시작");
			} else if (man.equals("가위") && woman.equals("바위") || 
					   man.equals("바위") && woman.equals("보") || 
					   man.equals("보") && woman.equals("가위")) {
				System.out.println("유진 승리");
				break;
			} else {
				System.out.println("하녕 승리");
				break;
			}
		}
	
	}

}

숫자 맞추기 게임

import java.util.Scanner;

public class NumberGame {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int answer = (int)(Math.random() * 100) + 1;
		int input = 0; // 사용자가 입력 
		int count = 0; // 시도 횟수 카운트 
		
		Scanner sc = new Scanner(System.in);
		
		do {
			count++;
			System.out.println("1~100사이의 값을 입력하세요 : ");
			input = sc.nextInt();
			if (input == answer) {
				System.out.println("정답!");
				System.out.println("시도 횟수 : " + count);
				break;
			} else if (input < answer) {
				System.out.println("up");
				System.out.println("시도 횟수 : " + count);
				continue;
			} else if (input > answer) {
				System.out.println("down");
				System.out.println("시도 횟수 : " + count);
				continue;
			}
		
		} while (true);

	}

}

2차원 배열

배열 선언, 초기화

int a = 10;
// 1차원 배열 
int[] b = new int[5];
// 2차원 배열 - [행][열]
int[][] c = new int[3][2];
// int[][] c = new int[3][]; 
// 가변형 배열 - 열 개수는 초기화할 때 정해진다.
// 3차원 배열 - [면][행][열] 
iny[][][] d = new int[2][3][4]; 

성적 처리 프로그램 예제

int[][] score = { { 90, 85, 65 }, { 20, 76, 100 }, { 30, 30, 30 }, { 40, 80, 90 }, { 100, 70, 58 } };

int korTotal = 0;
int engTotal = 0;
int mathTotal = 0;

System.out.println("번호\t국어\t영어\t수학\t총점\t평균");
System.out.println("============================================");
for (int i = 0; i < score.length; i++) {
	// 과목별 점수 누적
	korTotal += score[i][0];
	engTotal += score[i][1];
	mathTotal += score[i][2];
	// 학생별 성적 총점, 평균 구하여 출력
	int sum = 0;
	double avg = 0;
	for (int j = 0; j < score[i].length; j++) {
		sum += score[i][j];
	}
	avg = sum / score[i].length;
	System.out.println(
			(i + 1) + "\t" + score[i][0] + "\t" + score[i][1] + "\t" + score[i][2] + "\t" + sum + "\t" + avg);
}
System.out.println("=============================================");
System.out.println("총점\t" + korTotal + "\t" + engTotal + "\t" + mathTotal);
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글