SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Eclips] Java class 8 - String 함수들, enum(나열형) 본문

Java

[Eclips] Java class 8 - String 함수들, enum(나열형)

D_Aiden 2023. 12. 18. 11:00
728x90
반응형
SMALL

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 열거형은 각각의 상수로 일주일의 요일을 나타냅니다.
             각 상수는 열거형의 고유한 인스턴스로 간주됩니다.

  1. 고정된 상수 집합: enum은 미리 정의된 상수 집합으로 제한됨. 즉, 새로운 값이 동적으로 추가/변경 되지 않음.
  2. 클래스 형태: 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) {
    }
}

 

728x90
반응형
LIST