일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- java 논리연산자
- SQLD 자격시험 개념정리
- java 성별
- JAVA 연산자
- JAVA for문
- JAVA 제어문
- sqld 옵티마이져
- java 함수
- sqld 자격증
- sqld remame
- java string
- SQLD 핵심포인트
- sqld trigger
- java Fish
- SQLD 옵티마이저
- java 로또
- java 단축키
- java spider
- SQLD 특강
- Java Cat
- PLSQL
- SQL
- sqld grant
- java
- sqld deny
- Java 메소드
- java 구구단
- java 상속
- java Animal
- sqld revoke
- Today
- Total
SQLD, ECLIPS, JAVA,PYTHON, NODE....
[Eclips] Java class 8 - String 함수들, enum(나열형) 본문
2023.12.18(챗GPT학습)
## String
- 문자열(String)은 프로그래밍에서 텍스트 데이터를 다루는 데 사용되는 데이터 타입.
- 문자열은 문자의 시퀀스로 구성되어 있으며, 대부분의 프로그래밍 언어에서 문자열을 표현하는 방법과 다양한 연산을 수행하는 함수와 메서드를 제공.
- 일반적으로 문자열은 작은따옴표('')나 큰따옴표("")로 둘러싸여 있음.
- 예를 들어, Python에서 다음과 같이 문자열을 정의.
phyton
my_string_single_quotes = 'Hello, World!'
my_string_double_quotes = "Hello, World!"
- 대부분의 프로그래밍 언어에서 문자열은 불변(immutable)하며, 이는 한 번 생성된 문자열은 수정할 수 없다는 것을 의미.
- 새로운 문자열을 생성하거나 조작하여 기존 문자열을 변경할 수는 있지만, 원래의 문자열 자체를 직접 수정할 수는 없음.
1. 연결(Concatenation): 두 문자열을 합쳐 새로운 문자열을 생성합니다.
str1 = "Hello"
str2 = " World"
result = str1 + str2 # "Hello World"
2. 인덱싱(Indexing) 및 슬라이싱(Slicing): 문자열에서 특정 위치의 문자를 참조하거나 부분 문자열을 추출합니다.
my_string = "Hello, World!"
char_at_index_7 = my_string[7] # 'W'
substring = my_string[0:5] # 'Hello'
3. 길이(Length): 문자열의 길이를 반환합니다.
my_string = "Hello, World!"
length = len(my_string) # 13
4. 검색 및 치환(Search and Replace): 특정 문자열을 검색하거나 대체합니다.
my_string = "Hello, World!"
is_contained = "World" in my_string # True
new_string = my_string.replace("Hello", "Hi") # "Hi, World!"
## String 관련 메소드(=함수) 4가지.
1) String
- 불변(Immutable): String 클래스는 생성된 후에는 변경할 수 없음.
- 새로운 문자열을 생성, 문자열을 조작하는 경우, 새로운 객체를 생성.
- 스레드 안전(Thread-Safe): String 객체는 스레드에서 안전함.
여러 스레드에서 동시에 접근해도 안전하게 사용할 수 있습니다.
String str = "Hello, World!";
2) StringBuilder
- 가변(Mutable): StringBuilder 클래스는 문자열을 변경할 수 있는 가변 클래스입니다.
문자열을 추가하거나 변경할 때 새로운 객체를 생성하지 않고 기존 객체를 수정합니다. - 스레드 안전하지 않음: StringBuilder는 스레드에서 안전하지 않기 때문에,
멀티스레드 환경에서 사용 시 동기화를 직접 처리해야 합니다.
StringBuilder stringBuilder = new StringBuilder("Hello");
stringBuilder.append(", World!");
3) StringBuffer: 속도가 빨라짐(=cashe 메모리라고 함)
- 가변(Mutable): StringBuffer 클래스도 문자열을 변경할 수 있는 가변 클래스이며, StringBuilder와 유사합니다.
하지만 StringBuffer는 스레드에서 안전하게 동작합니다. - 스레드 안전: StringBuffer는 여러 스레드에서 안전하게 사용할 수 있도록, 동기화되어 있습니다.
StringBuffer stringBuffer = new StringBuffer("Hello");
stringBuffer.append(", World!");
4) StringToKenizer
- 문자열 분리 도구: StringTokenizer는 특정 구분자를 기준으로 문자열을 토큰(token)으로 분리하는 데 사용됩니다.
- 간단한 구분 및 분리 기능: 주어진 문자열을 특정 구분자로 나누어 토큰을 생성합니다.
String sentence = "This is a sample sentence";
StringTokenizer tokenizer = new StringTokenizer(sentence);
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
// 각 토큰에 대한 처리
}
(연습1) String 연습
package src.String;
public class StringEx {
public static void main(String[] args) {
String str = "자바커피";
int len = str.length();
for(int i=0; i<len; i++) {
char ch = str.charAt(i);
System.out.println(ch);
String str1 = "자바"; //String의 상수(값)로 인식
String str2 = "자바"; //String의 상수(값)로 인식
if(str1==str2) {
System.out.println("같음"); //생성자함수가 아닌, str1과 str2만 비교, 같음으로 출력.
}else {
System.out.println("다름");
}
String str3 = new String("자바"); //new로 생성하면 동일한 문자열객체가 heap메모리에 새롭게 객체생성됨
String str4 = new String("자바");
if(str3.equals(str4)) { //주소 값인 String 동치연산자(equals)사용해야 됨
System.out.println("같음");
}else {
System.out.println("다름");
}
String str5 = " Let it be. ";
String str6 = str4.trim(); // trim 메서드는 문자열의 앞뒤 공백을 제거.
System.out.println(str6);
System.out.println(str6.concat(" Speaking words of wisdom."));
System.out.println(str6.toUpperCase());
System.out.println(str6.toLowerCase());
System.out.println(str6.replace('e', 'a'));
System.out.println(str5);
System.out.println(str6);
String str = "신나고 재미있는 자바";
System.out.println(str.substring(3));
System.out.println(str.substring(3, 7));
}
}
package src.String;
public class StringBuilderEx {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("역사를 하노라고 맨땅을 파다가 ");
System.out.println(sb);
System.out.println(sb.append("커다란 고인돌을 끄집어 내어놓고 보니")); //append는
System.out.println(sb.insert(26, "하나 ")); //insert 함수는 26번째에 "하나"를 추가
System.out.println(sb.delete(21, 23)); //delete 함수는 21번쨰에 23을 삭제?
System.out.println(sb.deleteCharAt(9)); //delectCharAt은
StringBuilder sb = new StringBuilder("푸른 산빛을");
printStringBuilder(sb);
sb.append(" 깨치고 적은 길을 걸어서 참어 떨치고 갔습니다.");
printStringBuilder(sb);
sb.insert(10, " 단풍나무 숲을 향하여 난");
printStringBuilder(sb);
}
static void printStringBuilder(StringBuilder sb) {
String str = sb.toString();
int len = sb.length();
int bufSize = sb.capacity(); //bufSize를 리턴하는 함수가 capacity임.
System.out.printf("%s(%d): %d %n", str, len, bufSize); //%s: 문자열 자리 %d: 정수형 자리 %n: 라인스킵(printf와 사용되는 키워드)
}
StringBuilder sb = new StringBuilder(100);
sb.append("자바");
System.out.println(sb + ": " + sb.capacity());
sb.trimToSize(); //불필요한 메모리 제거하는 함수 trimToSize임
System.out.println(sb + ": " + sb.capacity());
}
}
package src.String;
import java.util.StringTokenizer; //Ctrl+Shift+O로 선언
public class StringTokenizerEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "사과,배,복숭아";
StringTokenizer stok = new StringTokenizer(str,",");
while(stok.hasMoreTokens()) { //토큰들을 찾는 함수 hasMoreTokens
String s = stok.nextToken();
System.out.println(s);
}
String strss = "사과=10 | 초코렛=4 | 샴페인=2";
StringTokenizer stoks = new StringTokenizer(strss, "=|", true);
while(stoks.hasMoreTokens()) {
String stoksss= stoks.nextToken();
if(stoks.equals("="))
System.out.println("\t");
else if(stoks.equals("|"))
System.out.println("\n");
else
System.out.println(stoks);
}
}
}
(연습1) String으로 여러 함수들 코딩해보기
package src.String;
public class StringEx {
public static void main(String[] args) {
String str = "자바커피";
int len = str.length();
for(int i=0; i<len; i++) {
char ch = str.charAt(i);
System.out.println(ch);
String str1 = "자바"; //String의 상수(값)로 인식
String str2 = "자바"; //String의 상수(값)로 인식
if(str1==str2) {
System.out.println("같음"); //생성자함수가 아닌, str1과 str2만 비교, 같음으로 출력.
}else {
System.out.println("다름");
}
String str3 = new String("자바"); //new로 생성하면 동일한 문자열객체가 heap메모리에 새롭게 객체생성됨
String str4 = new String("자바");
if(str3.equals(str4)) { //주소 값인 String 동치연산자(equals)사용해야 됨
System.out.println("같음");
}else {
System.out.println("다름");
}
String str5 = " Let it be. ";
String str6 = str4.trim(); // trim 메서드는 문자열의 앞뒤 공백을 제거.
System.out.println(str6);
System.out.println(str6.concat(" Speaking words of wisdom."));
System.out.println(str6.toUpperCase());
System.out.println(str6.toLowerCase());
System.out.println(str6.replace('e', 'a'));
System.out.println(str5);
System.out.println(str6);
String str = "신나고 재미있는 자바";
System.out.println(str.substring(3));
System.out.println(str.substring(3, 7));
}
}
## Enum (조건나열형)
- enum은 열거형(Enumeration)의 약자.
- 서로 연관된 상수들의 집합을 정의하는 데이터 타입.
- Java에서는 enum 키워드를 사용하여 열거형을 정의할 수 있으며, 주로 서로관련 있는 상수들을 묶어서 사용할 때 유용하며, 코드를 더 읽기 쉽고 안전하게 만들어줍니다.
String str5 = " Let it be. ";
String str6 = str5.trim();
System.out.println(str6);
System.out.println(str6.concat(" Speaking words of wisdom."));
System.out.println(str6.toUpperCase());
System.out.println(str6.toLowerCase());
System.out.println(str6.replace('e', 'a'));
(해석)
1. String str5 = " Let it be. ";
- 변수 str5에 문자열 " Let it be. "을 초기화합니다. 이 문자열에는 앞뒤로 공백이 포함되어 있습니다.
2. String str6 = str5.trim();
- str5의 앞뒤로 있는 공백을 제거한 값을 새로운 변수 str6에 할당합니다. trim 메서드는 문자열의 앞뒤 공백을 제거합니다.
3. System.out.println(str6);
- str6의 값을 출력합니다. 공백이 제거된 "Let it be."가 출력됩니다.
4. System.out.println(str6.concat(" Speaking words of wisdom."));
- str6에 " Speaking words of wisdom."를 덧붙인 새로운 문자열을 출력합니다. concat 메서드는 문자열을 합쳐 새로운 문자열을 생성합니다.
concat : 연결하는 의미
ex) String s = "abc";
s.concat('def");
결과: abcdef
// concat : 연결하는 의미
//ex)
String s = "abc";
s.concat('def");
결과: abcdef
5. System.out.println(str6.toUpperCase()); //toUpperCase는 대문자로 변환
- str6의 값을 모두 대문자로 변환하여 출력합니다.
String original = "Hello, World!";
String upperCaseString = original.toUpperCase();
System.out.println(upperCaseString);
6. System.out.println(str6.toLowerCase()); //toLowerCase는 소문자로 변환
- str6의 값을 모두 소문자로 변환하여 출력합니다.
String original = "Hello, World!";
String lowerCaseString = original.toLowerCase();
System.out.println(lowerCaseString);
7. System.out.println(str6.replace('e', 'a'));
- str6에서 모든 'e'를 'a'로 대체한 결과를 출력합니다. 따라서 "Let it be."에서 'e'가 'a'로 바뀐 "Lat it ba."가 출력됩니다.
(예제1) 이렇게 정의된 Weekday 열거형은 각각의 상수로 일주일의 요일을 나타냅니다.
각 상수는 열거형의 고유한 인스턴스로 간주됩니다.
- 고정된 상수 집합: enum은 미리 정의된 상수 집합으로 제한됨. 즉, 새로운 값이 동적으로 추가/변경 되지 않음.
- 클래스 형태: enum은 실제로 클래스 형태로 컴파일되며, 각 상수는 해당 클래스의 인스턴스입니다.
따라서 메서드, 필드 등을 가질 수 있습니다.
enum Weekday {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Weekday today = Weekday.WEDNESDAY;
switch (today) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
System.out.println("Weekday: " + today);
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekend: " + today);
break;
}
3. 메서드와 값 추가: enum은 메서드와 값을 추가할 수 있습니다.
각 열거 상수는 자체 필드, 메서드를 가질 수 있습니다.
enum TrafficSignal {
RED("Stop"),
YELLOW("Slow down"),
GREEN("Go");
private final String action;
TrafficSignal(String action) {
this.action = action;
}
public String getAction() {
return action;
}
}
// 사용 예시
TrafficSignal currentSignal = TrafficSignal.RED;
System.out.println("Signal: " + currentSignal.name());
System.out.println("Action: " + currentSignal.getAction());
enum을 사용하면 코드를 더 간결하게 만들 수 있고, 가독성이 향상되며, 프로그램의 유지보수가 용이해집니다.
(연습2) 의류정보를 enum함수로 나열해보기
package enumEx;
public class ClothingTest {
public static void main(String[] args) {
ClothingiInfo obj = new ClothingiInfo("54127", "반팔티셔츠", "면100%", Season.SUMMER);
ClothingiInfo obj = new ClothingiInfo("54127", "반팔티셔츠", "면100%", Season.SUMMER); //열거타입에 Season클래스의 SUMMER를 쓴다는 의미
ClothingiInfo obj = new ClothingiInfo("54127", "반팔티셔츠", "면100%", ClothingiInfo.Season.SUMMER); //열거타입에 Season클래스의 SUMMER를 쓴다는 의미
System.out.println("상품코드: " + obj.code);
System.out.println("상품명: " + obj.name);
System.out.println("소재: " + obj.material);
System.out.println("계절구분: " + obj.season);
System.out.println(obj.season.value());
Season[] seasons = Season.values();
for(Season s: seasons) {
System.out.println(s.value());
System.out.println(s+":"+s.value());
}
Day[] days = Day.value();
for(Day ss: days) {
System.out.println(ss+":"+ss.value());
}
}
}
package enumEx;
//의류정보 클래스
public class ClothingiInfo {
String code, name, material;
// int season;
// static final int SPRING = 1;
// static final int SUMMER = 2;
// static final int FALL = 3;
// static final int WINTER = 4;
Season season; //열거 타입에 변수를 선언해서
// public enum Season { //클래스 안에 선언한다면, 클래스명.열거명.class로 생성됨.
// SPRING, SUMMER, FALL, WINTER;
// }
public ClothingiInfo(String Code, String name, String material, Season Season) {
this.code = Code;
this.name=name;
this.material=material;
this.season=Season;
}
}
package enumEx;
public enum Season {
SPRING("봄"), SUMMER("여름"),FALL("가을"), WINTER("겨울");
final private String name; //반드시 선언해야 될 명령어는 final private임
private Season(String name) { //생성자를 선언한다.
this.name=name;
}
String value() { //열거상수와 연관된 상수를 선언한다.(보통 value라고 사용한다고 함)
return this.name;
}
}
package enumEx;
public enum Day {
MONDAY("월"), TUESDAY("화"), WENDESDAY("수"), THURSDAY("목"), FRIDAY("금"), SATURDAY("토"), SUNDAY("일)");
final private String name;
private Day(String name){
this.name=name;
}
String value() {
return name;
}
}
package enumEx;
public class DayTest {
public static void main(String[] args) {
}
}
'Java' 카테고리의 다른 글
[Eclips] Java Class 11 - I/O 연습, UI구현 및 연동(I/O) (0) | 2023.12.21 |
---|---|
[Eclips] Java class 10 - 이너클래스 Inners(Nested) class, 스레드Thread, 멀티 스레드 multi Thread, I/O 상속 (0) | 2023.12.20 |
[Eclips] Java - 상속 및 OOP 과제 (3) | 2023.12.17 |
[Eclips] Java Class 7 - toString, 추상클래스(abstract), 인터페이스(interface) (0) | 2023.12.15 |
[Eclips] Java Class 6 - 상속구조, final, tostring (0) | 2023.12.14 |