H'academy
  • H'academy
  • Web
    • Back-end
      • Spring Framework
        • Spring 개발환경 구축
          • Project 생성
          • Maven 설정
          • Maven 저장소 위치 설정
          • Apache Tomcat 연동
          • Lombok 설정
        • Spring MVC Project
          • pom.xml
          • web.xml
          • root-context.xml
          • servlet-context.xml
          • DispatcherServlet
        • Controller
          • File Upload / Download
          • RestController(작성중)
        • Spring Test
          • Assert 단정문
          • Spring 환경 연동 테스트
          • MockMvc Test
        • Spring AOP
          • AOP 용어
          • Pointcut Expression
          • Filter
          • Interceptor
          • Filter vs Interceptor
          • Controller Advice(작성중)
        • Spring JDBC
          • DBCP
          • myBatis
            • ResultMap 활용
        • ETC
          • Logging
            • Tomcat Logging 설정
          • Property 관리
          • E-mail
            • Gmail 변경사항
          • Scheduler
          • Websocket
      • Spring Boot
        • STS 다운로드
        • 프로젝트 생성
        • 프로젝트 구조
        • Spring Devtools
        • Spring Controller
          • JSP 연동
            • * JSP 생성불가 문제
            • Spring Boot 3.x
          • Model
          • 요청 파라미터 처리
          • 경로 변수 처리
          • 요청 메소드
          • Redirect
          • Spring Actuator
        • Spring Boot JDBC
          • Database 정보
          • DAO Pattern
          • ORM Framework
            • myBatis
              • Mapper 생성
            • Spring Data JPA
        • Spring AOP
          • AspectJ
          • Filter
          • Interceptor
          • ControllerAdvice
        • REST API
        • Spring WebSocket
        • Send Mail
        • Logging
        • Spring Boot Test
        • Lombok
      • Java EE
        • 개발환경 구성
          • Server와 Client
          • Web Server와 WAS
        • Dynamic Web Project
      • Apache Tomcat
        • Apache Tomcat 구조
        • Tomcat User 생성
        • Tomcat Manager 설정
      • Maven
      • Jenkins
        • Installation
          • Github Webhook 설정
          • Maven 연동
        • Project setting
          • 소스 코드 관리 설정
          • 빌드 유발 설정
          • 빌드 작업 설정
      • OpenAPI(swagger)
        • swagger 2.x (legacy)
        • swagger 3.x (boot)
        • Swagger UI 꾸미기
        • SpringDoc
    • Front-end
      • HTML
        • Heading
        • <A>
        • <IMG>
        • <DIV>
        • <TABLE>
        • <FORM>
          • <INPUT>
          • <SELECT>
          • <TEXTAREA>
          • <FIELDSET>
        • List
      • CSS
        • CSS 적용 방식
          • 크기(size)
            • 픽셀(px)
          • 색상(color)
        • CSS 선택자
          • 스타일 우선순위
        • CSS 주요 속성
          • 크기 속성
            • border
            • margin
            • padding
            • box-sizing
          • 배경 속성
          • 글자 속성
            • font
            • text
          • 배치 속성
            • position
            • display
            • overflow
            • float
            • flexbox
        • CSS Reset
      • JS
        • syntax
          • let, const
          • 구조 분해 할당
          • spread operator
          • Object copy
          • this
          • module
        • jQuery
          • structure
          • function
          • ajax
            • ajax file upload
        • VueJS
          • CDN(Vue3)
            • 기본 구조
            • Vue Devtools
            • jQuery vs VueJS
            • Vue instance
              • data
                • IME issue
              • v-model
              • template
              • computed
              • watch
                • deep watch
                • vs Computed
              • methods
            • Vue directive
              • v-text
              • v-html
              • v-bind
                • v-bind style
                • v-bind class
              • v-on
                • once
                • prevent
              • v-show
              • v-if
              • v-for
          • Vue-cli 3
            • 프로젝트 구조
            • src
              • main.js
              • App.vue
              • HelloWorld.vue
            • Vue Router 4
              • History mode
              • 404 not found
              • Guard
                • beforeEach
            • Vuex
              • 이동 횟수 측정
            • axios
              • interceptor
          • Vue-electron
        • ReactJS
          • CDN(React18)
            • 템플릿 설명
            • JSX
            • render
            • Handling Events
              • onClick
              • onInput
            • Component
              • 클래스 컴포넌트
                • state
                • props
                • event
                  • Mouse
                  • Input
                • lifecycle
              • 함수형 컴포넌트
                • useState
                • useEffect
                • useReducer
                • useMemo
                • props
                • 조건부 렌더링
          • CRA
            • 자원 경로 설정
            • src 절대 경로 설정
            • react-router
            • Context API
            • Electron 설정
        • Webpack
          • NodeJS
          • Git
    • Ubuntu server
      • Jenkins
    • 테스트 도구
      • JMeter
        • Test Plan
        • Test Plan(with login)
        • Plugin 설치
    • WebRTC
  • Base Language
    • Java
      • Java 실행 과정
        • 개발 환경 구축
        • 샘플 코드 작성
        • 컴파일/실행
        • 환경 변수 설정
      • Java 초급
        • Hello world
        • 자료와 정보
        • 변수
          • 정수
            • 정수의 저장 원리
            • 정수형 변수 생성
          • 실수
            • 실수의 저장 원리
            • 실수형 변수 생성
          • 논리
            • 논리형 변수 생성
          • 문자
          • 문자열
            • 문자열 변수 생성
          • 사용자 정의 자료형
        • 연산자
          • 대입 연산
          • 부호 연산
          • 산술 연산
          • 복합 대입 연산
          • 증감 연산
          • 쉬프트 연산
          • 비트 연산
          • 비교 연산
          • 논리 연산
          • 삼항 연산
          • 변환 연산
        • 표준 입출력
          • 표준 출력
          • 표준 오류 출력
          • 표준 입력
            • Scanner 입력
        • 제어문
          • if 구문
            • 단일 조건
            • 두 가지의 조건
            • 여러 가지의 조건
          • switch~case 구문
          • while 구문
          • do~while 구문
          • for 구문
        • 랜덤(Random)
        • 배열
          • 1차원 배열
          • 2차원 배열
          • 다차원 배열
          • Sort
            • 선택 정렬
            • 버블 정렬
            • 삽입 정렬
      • Java 중급
        • 객체 지향 프로그래밍
        • 클래스
        • 인스턴스
        • 필드
        • 메소드
          • 설정(setter) 메소드
          • 반환(getter) 메소드
        • 생성자
        • 접근 제한
          • private
          • package
          • protected
          • public
        • 정적(static)
        • 불변(final)
        • 상수(constant)
        • 상속
          • this와 super의 이해
          • 멤버 변수 설정
          • 멤버 메소드 설정
          • 생성자 설정
        • 추상화
          • 추상 클래스
          • 인터페이스
        • 다형성
        • 중첩 클래스
          • 일반 중첩 클래스
          • static 중첩 클래스
          • 지역 중첩 클래스
          • 익명 중첩 클래스
      • Java API(작성중)
        • java.lang
        • java.util
        • java.text
        • java.time
        • java.io
        • java.net
        • java.sql
        • java.awt
        • javax.swing
      • Java 고급
        • 제네릭(Generic)
        • 열거형(Enum)
        • Annotation Type
          • Retention
          • Target
          • Nested Annotation
        • Java Reflection
          • Intro
          • Class
          • Field
          • Constructor
          • Method
          • Package
      • JDBC
        • 드라이버 로드
        • 연결 생성
          • JDBC Driver 유형
        • JdbcTemplate
      • Java 버전별 변경사항
        • Java 1.8
          • Lambda Expression
          • Stream API
          • java.time 패키지
        • Java 9
        • Java 12
          • switch~case
        • Java 13
          • Text Block
    • Arduino
      • 학습 준비
        • Reference
        • 아두이노 온라인 시뮬레이터
        • 전기의 이해
        • 그라운드(GND)의 이해
      • 개발 환경 구축
        • CH340 보드 설치
        • Editor 글꼴 설정
      • 아두이노 제어
        • 코드의 구성
        • 시리얼 출력
        • 디지털 출력
          • LED 출력
        • PWM 출력
        • 시리얼 입력
        • 디지털 입력
          • PIR 센서
        • 아날로그 입력
          • 온도 센서(LM35DZ)
          • 조도 센서
          • 가스 센서
        • 피에조 부저
        • 서보 모터 제어
          • 시리얼 서보 모터 제어
          • 스위치 서보 모터 제어
        • 온습도 센서(DHT-11)
        • LCD
      • 아두이노 통신
        • 블루투스(Bluetooth)
          • HC-06
            • 온도 센서 활용
          • HM-10
        • 와이파이(Wi-Fi)
          • ESP-01
            • WiFiEsp 라이브러리 추가
            • WiFiEsp 네트워크 스캔
        • 이더넷(Ethernet)
        • ArduinoJson 라이브리 사용
    • Regular Expression
  • Database
    • Oracle
      • 설치
        • SQL Plus
        • SQL Developer
        • DBeaver
        • Docker(Mac OS)
      • SQL
        • 관리자 명령
          • 사용자 관리
          • 권한 관리
          • Encoding 설정
          • 서비스 포트 설정
        • 사용자 명령
          • 테이블 관리
            • 테이블 항목 제약 조건
            • 외래키 제약조건
            • 데이터 유형
          • 시퀀스 관리
          • 데이터 관리
            • 데이터 추가
            • 데이터 조회
              • 오라클 내장 함수
              • 그룹 조회
              • Top N Query
            • 데이터 수정
            • 데이터 삭제
          • 뷰 관리
          • 인덱스 관리
          • 집합 연산
          • 테이블 조인
            • 등가 조인
            • 외부 조인
        • HR 계정
        • 기타 명령
          • 컬럼 간격 조정
      • 내보내기 및 불러오기
        • EXPDP, IMPDP
        • Docker로 실행중인 경우
      • 기타
        • 자동 세션 제거
        • Tablespace 관리
        • Unlock user
  • 면접대비
    • Q&A
      • Java
      • Database
      • Web
      • IT 일반상식
  • ETC
    • Eclipse IDE
      • 설치
      • 화면 설명
      • 환경 설정
      • 프로젝트 생성
      • 소스파일 작성 및 실행
    • Github
      • Github 계정 관리
      • Github 저장소 관리
        • Profile
        • Collaborators
        • Code
        • Issues
        • Pull requests
        • Action
          • Vue 3 Deploy Action
      • Personal Access Token
      • Git ignore 설정
        • Spring 개발용 샘플
      • Github Eclipse 연동
        • Branches
        • Project
        • Team project
          • Dynamic web project
          • Spring Boot Project
          • Branch 생성
          • Pull Request
          • Branch 보호
          • Branch 다시 생성
    • Figma
      • Team
      • Design
      • Component
    • 과정평가형
      • 실기 모의고사 1회
      • 실기 모의고사 2회
      • 실기 모의고사 3회
      • 실기 모의고사 4회
    • VScode
      • Live Server 실행 오류
      • Github 계정 변경
    • Naver ToastUI Editor
      • Editor 만들기
        • Editor options
          • File upload
      • Viewer 만들기
    • 문자 인코딩 방식
    • OBS
      • 녹화 잡음 제거 설정
    • Semantic Version
Powered by GitBook
On this page
  • 문자열
  • 원시형과 참조형
  • 문자열 데모 1
  • 문자열 데모 2
  • 문자열 데모 3
  • 문자열 데모 4
  • 문자열 데모 5
  • 문자열 데모 6
  1. Base Language
  2. Java
  3. Java 초급
  4. 변수

문자열

문자열

이 문서에서는 문자열(String)에 대해서 다룬다.

원시형과 참조형

문자열을 이해하기 위해서는 원시형(raw type)과 참조형(reference type)에 대한 이해가 선행되어야 한다.

  • 원시형 : 프로그래밍의 근원이 되는 값을 저장하기 위한 형태의 자료형

  • 참조형 : 값 이외의 다양한 기능들까지 포함하여 사용할 수 있도록 만들어진 복합 자료형

원시형

우리 주변에서 살펴볼 수 있는 원시형 저장소는 물컵 등이 있다. 물컵을 가지고 우리가 할 수 있는 행위는 크게 두 가지 뿐이다.

  • 물을 담는다

  • 물을 마신다

물을 담는것은 설정(set), 물을 마시는 것은 추출(get)의 작업을 말하며 이 두 가지를 제외한 어떠한 작업도 할 수 없다. 이렇게 단순하게 저장이나 확인 등만 가능한 저장 형태를 원시형이라고 하며, 원시형은 자바에서 기본적으로 지원되며 다음 8개 형태이다.

  • boolean

  • byte

  • short

  • char

  • int

  • long

  • float

  • double

원시형의 주된 목적은 값의 저장이며, 이 외의 모든 작업은 개발자가 직접 수행해야 한다.

참조형

원시형만으로 프로그램을 구현할 수도 있겠지만, 우리는 좀 더 복잡하고 다양한 데이터와 기능이 필요하다. 예를들어 TV나 에어컨과 같은 도구들이 있다고 생각해보자. 이러한 도구들은 매우 복잡한 구조와 다양한 기능을 가지고 있는 것이 특징이며, 이를 쉽게 제어할 수 있도록 리모컨이 존재한다는 것이 특징이다. 리모컨을 이용하면 TV, 에어컨 등의 도구를 직접 만지지 않고서도 제공되는 모든 기능을 이용할 수 있다는 특징이 있는데, 이 때의 상태에 대해 용어를 정리하면 다음과 같다.

  • TV : 객체, 제어 대상

  • 리모컨 : 참조 변수, 제어 도구

여기서 중요한 것은 리모컨이며, 리모컨은 자기 자신 스스로는 의미가 없지만 TV와 같은 대상을 제어할 수 있다는 점에서 복잡한 데이터를 관리하는 구조에 특화되어 있다고 볼 수 있다.

프로그래밍에서도 이와 같이 단순한 값 1개가 아닌 다양한 기능이나 복잡한 데이터를 다루어야 하는 경우에는 리모컨과 같은 형태로 참조 변수라는 것을 만들어 제어하도록 구성하며, 이를 참조형 자료형이라고 부른다.

참조형은 원시형과 다르게 이클립스 등의 편집기 상에서 색상이 변하지 않으며, 일반적으로 첫글자가 대문자이다. 가장 대표적인 참조형 데이터가 String이다.

참조형의 특징은 다음과 같다.

  • 크기를 알 수 없다.

  • 크기를 알 수 없기 때문에 주문제작 방식을 가진다.

  • 주문제작 방식으로 저장소가 생기기 때문에 원시형에 비해 처리속도가 느리다.

  • 리모컨과 같은 참조변수를 이용하여 각종 명령을 내릴 수 있다.

문자열 데모 1

import java.lang.*;

public class StringExample1 {
    public static void main(String[] args){
        String a = "Hello World!";
        System.out.println(a);
    }
}

문자열은 쌍따옴표(")를 이용하여 글자를 감싸 표기한다. 문자열은 문자가 모여 만들어진 형태이며, 각각의 문자들은 char형태이므로 2byte의 크기를 가진다. 따라서 Hello World!는 12글자이므로 24byte의 크기를 가진다. 문자열의 크기는 글자수에 따라 달라지기 때문에 String이라는 형태만 보고서 크기를 알 수 없다. 참조형은 이처럼 만들기 전까지 크기를 알 수 없다는 특징을 가진다.

문자열 데모 2

import java.lang.*;

public class StringExample2 {
    public static void main(String[] args){
        String a = "Hello Java";
        
        System.out.println(a.length());
        System.out.println(a.toUpperCase());
        System.out.println(a.toLowerCase());
    }
}

이번 예제를 통해서 참조형이 가진 기능을 사용하는 것에 대해 살펴볼 수 있다. 문자열인 String은 참조형 데이터이기 때문에 리모컨 역할을 하는 참조변수 a를 통해 String의 다양한 기능들을 이용할 수 있다. 그 중 대표적으로 살펴볼 기능들은 다음과 같다.

  • a.length() : a가 제어하는 대상의 글자수를 구한다.

  • a.toUpperCase() : a가 제어하는 대상을 모두 대문자로 바꿔 반환한다.

  • a.toLowerCase() : a가 제어하는 대상을 모두 소문자로 바꿔 반환한다.

이외에도 다양한 기능들이 존재하는데, 이를 모두 a와 참조 연산자인 .을 이용하여 사용할 수 있다. Eclipse같은 IDE에서는 자동완성이 지원되기 때문에 좀 더 편하게 사용할 수 있다.

문자열 데모 3

import java.lang.*;

public class StringExample3 { 
    public static void main(String[] args) {
        String str = "Hello";
        
        System.out.println(str + 100);
        System.out.println(str + 3.14);
        System.out.println(str + "Java");
        System.out.println(str + true);
    }
}

이번 예제를 통해서는 문자열의 특징인 연결 연산에 대해서 살펴본다. 문자열은 기본적으로 수치가 아니기 때문에 사칙연산이 불가능하지만, 예외적으로 +만은 연결의 의미로 사용할 수 있으며, 모든 데이터는 문자열과 더해지면 문자열이 된다. 이러한 특징을 사용하여 다음과 같이 덧붙여 출력이 가능하다.

import java.lang.*;

public class StringExample3_1 {
    public static void main(String[] args){
        int a = 10;
        System.out.println("a = " + a);
        
        String name = "홍길동";
        System.out.println("이름 = "+name);
    }
}

출력 결과는 다음과 같다.

a = 10
이름 = 홍길동

값만 출력하는 것보다 도움말을 붙여서 출력하게 될 경우 가독성이 좋아지는 효과를 볼 수 있다.

문자열 데모 4

import java.lang.*;

public class StringExample4 {
    public static void main(String[] args){
        //String say = "나는 오늘 "피자"가 먹고 싶다!";
        String say = "나는 오늘 \"피자\"가 먹고 싶다!";
        
        System.out.println(say);
    }
}

위의 예제를 실행하면 다음과 같은 출력결과가 나온다.

나는 오늘 "피자"가 먹고 싶다!

주석 처리한 부분을 해제하면 오류가 발생하는데, 문자열을 표시하기 위한 쌍따옴표와 글자로 인식되어야 할 쌍따옴표를 구분하지 못하기 때문이다.

"나는 오늘 "피자"가 먹고 싶다!"

색상으로 구분해보면 위와 같으며, 자바 컴파일러에게 이를 알려주기 위해 다음과 같이 앞에 역슬래시(\)를 추가한다. 글꼴에 따라 ₩로 나오기도 하니 모양이 다르다고 해서 혼란스러워 하지 말자.

String say = "나는 오늘 \"피자\"가 먹고 싶다!";

이처럼 문자열에서는 역슬래시(\)가 특별한 의미를 가지며, 이를 이용한 다양한 조합 문자들이 존재한다.

문자열 데모 5

앞에서 배운 역슬래시(\)를 이용하여 출력 커서를 제어할 수 있다.

import java.lang.*;

public class StringExample5 {
    public static void main(String[] args){
        String str = "이름\t직업\n임꺽정\t의적\n황희\t정승\n장보고\t장군\n";
        
        System.out.println(str);
    }
}

문자열 내부를 살펴보면 \t와 \n이 존재하는 것을 확인할 수 있는데, 이들을 escape 문자라고 부른다.

  • \t : tab, 커서를 탭 이동한다. 탭을 이용하여 간격을 맞출 수 있다.

  • \n : new line. 커서를 다음 줄로 이동한다.

이외에도 여러 가지의 escape 문자들이 존재한다.

  • \b : backspace, 커서를 뒤로 한 칸 이동한다.

  • \r : carriage return, 커서를 줄의 처음으로 이동한다.

주로 \t와 \n이 많이 쓰이므로 이 두 가지는 반드시 기억하자.

문자열 데모 6

import java.lang.*;

public class StringExample6 {
    public static void main(String[] args){
        String folder = "C:\Windows";
        System.out.println(folder);
    }
}

위의 예제를 실행한 결과는 다음과 같이 출력된다.

StringExample6.java:4: error: illegal escape character
        String folder = "C:\Windows";
                            ^
1 error

역슬래시(\)는 뒤의 글자와 조합하여 특수한 명령을 실행하는데, 지금은 W와 조합하여 명령을 수행하려 했으나 해당하는 명령이 존재하지 않아 오류가 발생한 경우이다. 사실, 명령을 수행하려 했다기보다 역슬래시를 있는 그대로 출력하고 싶었지만 뜻대로 되지 않은 경우인데 이럴 경우에는 역슬래시를 2번 중첩하여 사용하여 문제를 해결한다.

  • \\ : 역슬래시를 화면에 출력한다.

다음과 같이 변경하여 출력하면 문제를 해결할 수 있다.

String folder = "C:\\Windows";
System.out.println(folder);

이처럼 자바의 문자에서는 \가 다양한 역할을 수행하기 때문에 문제가 생기지 않도록 주의하여 작성해야 한다.

Previous문자Next문자열 변수 생성

Last updated 3 years ago