Java 프로그래밍 1~4

kdew0308·2022년 10월 20일
0

자바

목록 보기
1/8

1. 자료형

1-1) 숫자(Number)

  • 숫자 형태의 자료형

    • 정수 / 실수 / 2진수, 8진수, 16진수

  • 10진수 12를 다른 진수로 표현할 때 원래 그대로 쓰고싶으면

System.out.println("0b" + Interger.toBinaryString(numBase2));
System.out.println("0" + Interger.toOctalString(numBase8));
System.out.println("0x" + Interger.toHexString(numBase16));

1-2) 부울 (Boolean)

  • 참과 거짓을 나타내는 자료형
    boolean isPass = true;
    boolean isOk = false;

1-3) 문자 (Character)

  • 한 개의 문자 표현에 사용하는 자료형
    char keyFirst = ‘a’;
    char keyLast = ‘z’;

1-4) 문자열 (String)

  • 문자들로 이루어진 집합
    String s1 = “Hello World!”;
    String s2 = “01234”;
  • 문자열 메소드
    • equals : 값 비교
    • indexOf : 위치 찾기
    • replace : 교체
    • substring : 문자열 자르기
    • toUpperCas : 대문자 출력

✏️ equals와 비교연산자(==)의 차이

equals는 변수가 담고있는 "값"을 비교하는 것
==는 "객체"를 비교하는 것

1-5)StringBuffer

  • 문자열을 자주 추가하거나 변경할 때 사용하는 자료형
    • 데이터가 변경이 되어도 객체가 새로 생성되지 않음 그냥 기존에 생성되어있는 객체에 데이터를 추가하거나 변경하는 것임. 그래서 문자열을 자주 추가하거나 변경할 때는 String 보다는 StringBuffer사용하는 것이 좋음
    • String은 데이터의 변경이 일어날 때 변경된 데이터를 새로운 객체에 넣음 그래서 메모리 과부하가 발생하고 속도가 느려짐
      StringBuffer sb1 = new StringBuffer(“Hello World!”);
  • StringBuffer 메소드
    • append : 문자열 계속 옆으로 추가
    • insert
    • substring

1-6) 배열 (Array)

  • 많은 수의 데이터를 담을 수 있는 자료형
    int[] myArray1 = {1, 2, 3, 4, 5};
    char[] myArray2 = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
    String[] myArray3 = new String[3];

1-7) 리스트 (List)

  • 배열과 같이 여러 데이터를 담을 수 있는 자료형
  • 추가로 여러가지 메소드를 제공
ArrayList l1 = new ArrayList();
l1.add(1);
  • 리스트 메소드
    • add : 데이터 추가
    • get : 데이터 꺼내오기
    • size : 사이즈
    • remove : 지우기
    • clear : 비우기
    • sort : 정렬
      • sort(Comparator.naturalOrder()); : 오름차순
      • sort(Comparator.reverseOrder()); : 내림차순
    • contains : 데이터가 들어있는지

1-8) 맵 (Map)

  • key, value 형태로 데이터를 저장하는 자료형(쌍을 이뤄서)
  • key값으로 데이터 접근
HashMap<String, String> map = new HashMap<String,String>();
map.put(“product”, “kiwi”);
map.put(“price”,9000);

//결과
{product=kiwi, price=9000}
  • 맵 메소드
    • put : 데이터 넣기
    • get : 가져오기
    • size :사이즈
    • remove : 데이터 지우기
    • containsKey : 포함되어있는지

1-9) 제네릭스 (Generics)

  • 자료형을 명시적으로 지정
    • 해당되는 자료형만 넣을 수 있음
  • 제한적일 수 있지만 안정성을 높여주고 형변환을 줄여줌
ArrayList<String> l1 = new ArrayList<String>(); //new ArrayList<>() 생략가능
l1.add("hello");

HashMap<String, Integer> map1 = new HashMap<String,Integer>(); // new HashMap<>() 생략가능
map1.put("apple", 10000);

//결과
l1 = [hello]
map1 = {apple=10000}

2. 여러가지 연산자

2-1) 항

  • 단항 연산자: 항이 한 개
    num++
  • 이항 연산자: 항이 두 개
    1 + 1
  • 삼항 연산자: 항이 세 개
    (3 > 1) ? 1 : 0

2-2) 연산자

📌 대입 연산자 (=)

  • 우측의 데이터를 좌측의 변수에 대입
    int num = 100;

📌 부호 연산자 (+, -)

  • 부호를 나타내는 연산자
    +10, -10

📌 산술 연산자 (+, -, *, /, %)

  • 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
    10 % 3

📌 증가/감소 연산자 (++, --)

  • 값을 1만큼 늘리거나 (++), 1만큼 줄임 (--)
    num++, ++num, num--, --num
    num++ : 초기 값
    ++num : 초기값+1

📌 관계 연산자 (>, <, >=, <=, ==, !=)

  • 두 항의 값 크기 비교
  • 결과 값은 비교 결과에 따라 true 또는 false
    10 > 9
    5 != 3

📌 논리 연산자 (&&, ||, !)

  • 논리식에 대해 참 거짓 판단
  • 결과 값은 판단 결과에 따라 true 또는 false
    (10 > 9) && (1 == 0)
    (10 > 9) || (1 == 0)

📌 복합 대입 연산자

  • 대입 연산자와 다른 연산자를 조합한 연산
  • 코드를 간결하게 작성할 때 사용
    num1 += num2; : num1 = num1 + num2
    num1 %= num2;

📌 삼항 연산자

(a==100) ? "yes":"no" : yes

2-3) 2진법

  • 컴퓨터에서 데이터 표현에 사용
  • 2를 기반으로 하는 숫자체계

2-4) 2의 보수

  • 2의 제곱수에서 빼서 얻은 이진수
  • ex) 2진수 3의 2의 보수: 11 → 01

2-5) 비트 연산자

  • 비트 단위로 연산
  • 기본 연산자와 비트 연산자 비교

2-6) 비트 논리 연산자 (&, |, ^, ~)

📌 AND 연산자 (&)

  • 두 개의 비트 값이 모두 1인 경우에만 결과 1

ex) 5 & 3 → 1

printf("%04d", Integer.parseInt(Integer.toBinaryString(result)));

✏️ parseInt : 문자열 인자를 파싱하여 특정 진수의 정수를 반환
✏️ %04d : 4자리로 출력하는데 부족한 자리는 0으로 채움

📌 OR 연산자 (|)

  • 두 개의 비트 값 중 하나라도 1이면 결과 1

ex) 5 | 3 → 7

📌 XOR 연산자 (^)

  • 두 개의 비트 값이 같으면 0, 다르면 1

ex) 5 ^ 3 → 6

📌 반전 연산자 (~)

  • 비트 값이 0이면 1로, 1이면 0으로 반전

ex) ~5 → -6

2-7) 비트 이동 연산자 (<<, >>, >>>)

📌 << 연산자

  • 비트를 왼쪽으로 이동
    ex) 3 << 1

📌 >> 연산자

  • 비트를 오른쪽으로 이동
    ex) 3 >> 1

📌 >>> 연산자

  • 비트를 오른쪽으로 이동 (부호비트 상관 없이 0으로 채움)

3) 조건문

3-1) 조건문 - if

  • 조건에 따라 무엇을 실행할지 판단하는 분기 구조
if (조건문 1) {
조건문 1을 만족할 때 실행할 내용;
} else if (조건문 2) {
조건문 2를 만족할 때 실행할 내용;
} else {
그 외의 상황에서 실행할 내용;
}

3-2) 조건문 - switch

  • 입력 값에 따라 어떤 case를 실행할지 판단하는 분기 구조
switch (입력 값) {
case 입력 값 1:
	실행할 내용;
	break;
case 입력 값 2: …
	실행할 내용;
	break;
…
default:
	실행할 내용;
	break;
}

3-3) 반복문 - for

  • 주어진 횟수만큼 반복하여 실행하는 구조
for (초기치; 조건문; 증가치;) {
	반복하여 실행할 내용;
}

✏️ continue : 아래 코드는 실행하지 않고 바로 다음 i로 넘어감
✏️ break : 반복문 실행하지 않고 바로 탈출함

for each

  • 모든 원소를 순회할 때(1씩 증가할때)
for( 자료형 변수 : 반복하고자 하는 대상)
{
	반복하여 실행할 내용;
}

예시

int[] nums = {1, 2, 3, 4, 5}
for (int num : nums) {
	System.out.println(num);
}

//결과
1
2
3
4
5

3-4) 반복문 - while

  • 조건문이 만족하는 동안 반복하여 실행하는 구조
  • 안에 증감문 필수 작성
  • while과 do-while 구조가 있음
while (조건문) {
	반복하여 실행할 내용;
}
do {
	반복하여 실행할 내용;
} while (조건문);

4) 다차원 배열

  • 일차원 배열 ex)
    int[] myArray1 = {1, 2, 3, 4, 5};
    char[] myArray2 = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
  • 다차원 배열 ex)
    int[][] myArray3 = {{1, 2, 3,}, {4, 5, 6}};
    int[][][] myArray4 = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
    • 2차원 배열을 많이 사용
    • 3차원 이상은 잘 사용 안함

4-1) 이차원 배열

4-2) 배열 출력 방법

📝 일차원 배열

// 방법 1
for (int i=0; i<my Array.length; i++)
{
	system.out.println(myArray[i]);
}

// 방법 2
for (int i : my Array)
{
	system.out.println(i);
}

결과
1
2
3

📝 이차원 배열

int[][] myArray2 = {{1,2,3}, {4,5,6}};
// 방법 1
for (int i=0; i<myArray2.length; i++)
{
	for (int j=0; i<myArray2[i].length; j++)
	{
		system.out.println(myArray2[i][j]);
    }
}

// 방법 2
for (int ints : myArray2)
{
	for (int anInt : ints)
	{
		system.out.println(anInt);
    }
}

결과
1
2
3
4
5
6

0개의 댓글