[한화시스템 BEYOND SW캠프 7기] #19. Java - 제어문 / 참조 자료형 / String

아로롱·2024년 6월 9일

BEYOND SW CAMP 7

목록 보기
20/30

📱 제어문

~ 한 경우 input / ~ 한 경우 output을 만들어내는 조건문
반복되는 연산 과정을 자동화하는 반복문.

삼항 연산자 | 결과값 = 조건식 ? 반환값1 : 반환값2

  • 물음표(?) 앞의 조건식에 따라 결과의 값이 참(true)이면 1 반환, 거짓(false)이면 2 반환.
int answer = 1234;
System.out.println("비밀번호를 입력하세요.");
int input = sc.nextInt();
String result = (answer == input) ? "문이 열렸습니다" : "비밀번호가 다릅니다.";
System.out.println(result);

switch문 : 특정한 조건의 경우가 열거형으로 정해져있을 때 사용. if / else if 등의 조건문을 가독성 있게 표현하는 구문.

int answer = 1234;
System.out.println("원하시는 서비스 번호를 입력하세요.");
int input = sc.nextInt();
switch (input){
	case 1:
		System.out.println("대출 업무입니다.");
		break;
	case 2:
        System.out.println("예금 업무입니다.");
        break;
    case 3:
        System.out.println("적금 업무입니다.");
        break;

반복문 | while : 해당 되어야만 돌아감 / do-while : 무조건 한 번은 돌아감 !

int a = 1;
do {
	a++;
	System.out.println(a);
} while (a < 10);

for : (초기식; 조건식; 증감식;) 조건식의 결과가 참인 동안 반복적으로 실행하는 명령문.

  • while 문과 달리 자체적으로 초기/조건/증감식 모두 포함.
  • 반복문이 종료 될 수 있도록 기본 설계가 되어있다.

Enhanced for : 향상된 for문 또는 each문으로 불림.

        int[] arr = {1, 3, 5, 7, 9};
       // 일반 for 문
        for(int i = 0; i < 5; i++){
            System.out.println(arr[i]);
        }
       // enhanced for 문 : 반복횟수는 arr에 들어가있는 데이터 수만큼 반복.
        for(int i : arr){
            System.out.println(i);
        }

💿 java 의 메모리 구조


메소드 영역 : 컴파일된 소스코드(클래스 등), 정적 변수(static) 등이 저장되어 코드 전역에서 사용 가능한 공간.
스택 영역 : 기본 자료형의 값. 지역변수, 매개변수, 기본형 자료, 객체의 주소값 등을 저장.
힙 영역 : 참조 자료형의 값. 애플리케이션 실행 동안 생성되는 모든 클래스 인스턴스와 배열을 저장하는 곳.

  • 클래스란 다양한 기능들을 내장하고 있는 프로그램 묶음.

기본형 변수는 스택 영역에 저장되어 값을 직접 출력할 수 있지만,
참조형 변수인 객체 변수 등은 스택 메모리에는 힙 메모리의 주소만 저장해두고
실질적인 값은 힙 메모리에 저장함.
→ 배열을 출력할 때 Arrays.toString() 을 써야하는 이유! (아니면 주소값이 나옴)


🗒️ 참조자료형

원시 자료형 : Java에서 제공하는 기본 데이터 타입.

  • int, long, double, float, boolean, char 등
  • 스택 메모리에 직접 값을 저장.
  • 자동 기본값으로 초기화
  • new 키워드없이 리터럴(literal)로만 값을 세팅.
  • String 은 리터럴을 사용할 수 있는 특별한 참조 자료형.
    • 그 외에도 배열, wrapper 클래스도 리터럴 세팅 가능.

참조형 자료형

  • 객체의 주소(reference)를 저장. 실제 객체는 힙(heap) 메모리에 할당.
  • null 로 초기화.
  • new 키워드를 사용하여 값 세팅.
  • Java 에서 기본(원시) 자료형을 제외한 자료형은 모두 참조 자료형.
    • 참조형 타입은 모두 클래스 기반의 객체

Wrapper 클래스 : 객체로 만들어진 기본 자료를 의미.

원시자료형을 Wrapping한 클래스.
박싱 : 기본 자료형을 래퍼 클래스로 변환하는 과정.
언박싱 : 래퍼 클래스를 기본 자료형으로 변환하는 과정.

// int와 Integer간의 형변환
int a = 10;
Integer b = new Integer(20);
int c = b; // 오토 언박싱 : Integer -> int 형변환
Integer d = a; // 오토 박싱.

// String 과 int 의 형변환
int a = 10;
// int -> String 변환
String st1 = Integer.toString(a);
String st2 = String.valueOf(a);
// String -> int 변환
int b = Integer.parseInt(st1);

// 참조 자료형에 원시 자료형을 담을 때에는 Wrapper 클래스를 써야한다.
List<Integer> list1 = new ArrayList<Integer>();
list1.add(10);
list1.add(20);
list1.add(30);

📝 String 클래스 (객체)

문자열 자료형.

StringBuffer : 문자열을 추가하거나 변경할 때 주로 사용하는 객체.

  • StringBuffer buf = new StringBuffer(“hello”);
  • buf.append(” java”) // 문자열 추가
  • buf.append(” world”) // 문자열 추가
  • String new_str = buf.toString(); //새로운 String문자열로 변환
    String은 += 을 이용해 문자열을 추가할 수 있지만, 추가가 아닌 재선언하는 것.
    성능면에서 StringBuffer가 우수함.

StringBuilder : StringBuffer 와 같은 기능을 하는 객체.
동시성을 고려하지 않아 성능이 더 뛰어나지만, 멀티스레드 상황에서 동기화 문제 발생 가능성 존재.

// StringBuffer
StringBuffer sb1 = new StringBuffer("hello");
// append : 문자열 가장 뒤에 다른 문자열을 더하는 것.
sb1.append(" world");
sb1.append(" java");
String answer = sb1.toString();
sb1.insert(5, " python");
sb1.delete(17, sb1.length());
System.out.println(sb1);


// StringBuilder
// String += < StringBuffer < StringBuilder
// StringBuilder는 스레드 safe X
StringBuilder sb2 = new StringBuilder();
sb2.append("hello");
sb2.append("\n");
sb2.append("world");
profile
Dilige, et fac quod vis

0개의 댓글