프로그래밍언어36 자바(Java) 문자열(String) 대문사, 소문자 변환하기 가끔 문자열을 대문자로 바꾸거나 소문자로 바꿔야 하는 일이 생긴다. 이럴 때 String 클래스의 내장 기능을 사용하면 편하게 바꿀 수 있다. 아스키코드로 바꿀 수도 있지만 이미 만들어진 기능을 쓰는 게 더 좋지 않은가? 이번 포스팅에서는 대문자를 소문자로 바꾸거나 소문자를 대문자로 바꾸는 방법에 대해서 알아보자. 대문자로 바꾸기 자바의 공식문서를 보면 toUpperCase라는 메서드가 있으며 해당 메서드가 대문자로 바꿔주는 메서드이다. 알파벳이 아닌 문자는 영향을 받지 않는다. 정확히는 String의 경우 불변 객체이기 때문에 해당 객체가 바뀌는 것이 아니라 대문자로 이루어진 객체를 반환해준다. @Test @DisplayName("소문자를 대문자로 변환한다.") void upper() { // give.. 프로그래밍언어/Java 2022. 2. 9. 자바(Java) 문자열 자르기(split, subString) 사용법 프로그래밍을 하다 보면 특정 문자나 패턴을 기준으로 문자열을 자르고 싶을 때가 있다. 이럴 때 Java에 있는 String 클래스에 내장된 기능을 사용하면 가능하다. 이번 포스팅에서는 String의 기능인 split과 subString에 대해서 알아보자. Split split 메서드는 String 배열을 반환하는 메서드이다. 특정한 문자나 패턴을 기준으로 문자를 자르고 싶을 때 사용한다. 사용 방법은 아래와 같다. "안녕하세요,반갑습니다,수고하셨습니다,감사합니다" 라는 문자가 있고 나는 “,” 를 기준으로 문자열을 나누고 싶다고 하면 아래와 같은 형식으로 나눌 수 있다. @Test @DisplayName("문자열을 특정 기준으로 잘라 배열로 만든다.") void splitTest1() { // given.. 프로그래밍언어/Java 2022. 2. 9. 자바(Java) HashMap, HashTable, ConcurrentHashMap 차이 HashMap : 비동기로 처리가 되어있어 성능이 다른 Map들에 비해 좋다. HashTable : JCF가 나오기 전에 만들어진 레거시 클래스로 대부분의 메서드에 동기화가 걸려있다. 그로 인해 단일 스레드 환경에서 성능이 떨어진다. ConcurrentHashMap : 멀티 스레드 환경에서 동시성을 보장하기 위해 만들어진 클래스 JDK 1.5 버전에서 나왔다. get에는 동기화 처리가 되어있지 않으며 put에 보면 메서드에 붙어있는 것이 아니라 메서드 내부에 들어있는 것을 알 수 있다. 특정 상황에서만 동기화가 동작하게 함으로써 병목현상을 최소화 처리를 했다. 프로그래밍언어/Java 2021. 10. 27. 자바(Java) Map의 동작원리 Map의 기본적인 내용은 이전에 정리했으니 동작 원리에 대해 정리한다. Map은 내부적인 저장을 배열을 이용하여 저장한다. Key를 해시함수에 적용하여 나온 값을 이용해 인덱스를 지정한다. Map은 메모리를 절약하기 위해 처음부터 많은 공간을 차지하고 있지 않고 데이터가 일정이상 늘어나면 그때 배열의 크기를 2배로 늘리는 방식으로 진행한다. Java에서 해시 버킷의 크기를 확장하는 임계점은 load factor * 현재의 해시 버킷 개수이며, load factor는 0.75이다. 즉 3/4를 넘어가면 확장하게 된다. 배열의 초기 사이즈는 2^4(16)개이며 최대 버킷의 개수는 2^30이다. 인덱스를 구할때는 해시값을 배열의 크기인 M으로 모듈러 연산을 해서 구하게 된다. java의 경우 int를 사용하여.. 프로그래밍언어/Java 2021. 10. 26. Java Collection FrameWork(JCF)란? 왜 나오게 되었을까? 예전에는 자료구조를 이용할 때 같은 역할이나 목적이 같지만 구현체의 메서드명이 달라 여러움을 느꼈다. (Vector, Array, HashTable) 즉, 확장이 쉽지 않았으며, 표준 인터페이스를 구현하지 않다. 이러한 부분을 해결하기 위해 JCF가 나오게 되었다. JDK 1.2 버전부터 나왔다. 그래서 JCF가 먼데? 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다. 간단히 생각하면 자료구조 모음이라고 생각해도 될 것 같다. JCF의 계층 구조 크게 Iterable을 상속한 인터페이스와 Map을 상속한 인터페이스로 나눌 수 있다. Iterable에 포함된 인터페이스는 List, Queue, Set이다. List ArrayList : 크기가.. 프로그래밍언어/Java 2021. 10. 25. 자바(Java) 왜 for-each문을 추천할까? 인텔리제이에서 for문으로 작성하다보면 List와 같은 경우는 인덱스를 따로 쓰지 않는이상 for-each문으로 바꾸라고 경고를 한다. private static void test(List numbers) { for (int i = 0; i < numbers.size(); i++) { System.out.println(numbers.get(i)); } } 'for' loop replaceable with enhanced 'for' 왜 그럴까? 그것은 자료구조의 변경을 유연하게 하기위해 인터페이스로 객체를 사용하고 있기 때문이다. 인자로 들어오는 List가 ArrayList인지 LinkedList인지 Vector인지 Stack인지 알 수 없다. 여기서 발생하는 문제점은 바로 List에서 사용하는 get().. 프로그래밍언어/Java 2021. 8. 25. 자바(Java)에서 예외(Exception)란 무엇인가? 1. 예외란 무엇인가? 예외란 프로그램 실행 중 발생하는 이벤트로 프로그램 명령의 정상적인 흐름을 방해하는 것이다. 예외가 발생하게 될 경우 예외객체를 만들어 런타임 시스템에 전달한다. 예외객체는 오류발생 당시의 프로그램 상태와 오류정보가 포함되어있다. 이러한 과정을 예외 발생이라고 한다. 2. 예외의 상속 구조 자바에서의 예외는 전부 Throwable을 상속받는다. Error의 경우는 개발자가 직접 사용할 일은 거의없다. 자바가 JVM이나 내부에 있는 라이브러리에서 문제가 될법한 상황에서 나온다. 즉, 애플리케이션이 정상적으로 동작하는데 심각한 문제가 있는 경우이다. 우리가 주로 사용하게 되는 에러는 Exception과 RuntimeException이다. 우리가 사용하는 예외는 크게 Checked Ex.. 프로그래밍언어/Java 2021. 2. 25. 자바(Java) - 오버로딩(Overloading)과 오버라이딩(Overriding) 이란? 오버로딩(Overloading) 오버로딩은 같은 이름의 함수를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답하게 한다. package main.java.overloadingAndOverriding; public class TestClass { public void sum(int a, int b) { System.out.println("a + b = " + a+b); } public void sum(double a, double b, double c) { System.out.println("a + b + c = " + a+b+c); } } package overloadingAndOverriding; import main.java.overloadingAndOverridin.. 프로그래밍언어/Java 2020. 9. 1. 자바(Java) - 불변 객체? Final 키워드? 면접에서 불변객체에 관해서 설명하라는 이야기를 듣게 되었다. 면접에서 제대로 답변을 하지 못해 공부하는 겸 정리를 하게 되었다. 불변객체 불변객체(Immutable Object)는 생성 이후 상태를 바꿀 수 없는 객체를 뜻한다. 자바에서 흔하게 볼 수 있는 불변객체는 문자열이다. 파이썬에서 흔하게 볼 수 있는 불변객체는 튜플이다. Final 자바에서 불변으로 만들기 위한 키워드이다. Final Class 클래스에 Final을 붙이게 되면 더이상 상속이 불가능하게 된다. 외부 사용자가 해당 클래스를 상속을 못하게 하기위해 사용한다. OOP 관점에서 볼때도 인터페이스나 추상클래스가 아닌 이상은 상속을 이용하는 것이 아니라 컴포지션을 사용하라고 한다. Final methods 메서드에 Final을 붙이게 되면.. 프로그래밍언어/Java 2020. 8. 27. 자바(Java) - Interface란 무엇인가(정의, 사용이유, 예제)? 1. 인터페이스란? 인터페이스는 자바에서 클래스들이 구현해야하는 동작을 지정하는 용도로 사용되는 추상 자료형이다. class 대신 interface라는 키워드를 이용하여 선언할 수 있으며 메소드 시그니처와 상수선언만을 포함할 수 있다. (java 8이 나오면서 interface에서 default method 정의가 가능해졌다.) 클래스에서 인터페이스를 구현하기 위해서는 implements 키워드를 사용하여 구현하며, 하나의 클래스는 여러개의 인터페이스를 상속받아 구현할 수 있다. 2. 인터페이스는 왜 써야 할까? 1. 여러명이서 작업을 할때 미리 인터페이스를 작성함으로써 메소드를 정할 수 있다. 2. 상속을 통한 이점을 누릴 수 있다. 3. 개방폐쇄(Open Close)법칙인 확장에는 열려있고 변경에는 .. 프로그래밍언어/Java 2020. 8. 26. 자바(Java) - 접근 제어자(제한자, access modifier)란 무엇인가? OOP의 특징 중 하나인 캡슐화를 잘 사용하기 위해 접근제어자(제한자, access modifier)를 사용해야 한다. 따라서 접근제어자에 대해 정리해보려 한다. 1. 접근제어자의 종류 2. 접근제어자는 왜 사용해야 할까? 3. 접근제어자는 언제 써야할까? 1. 접근제어자의 종류 접근제어자는 총 4가지로 public, protected, default, private가 있다. 접근 제어자는 클래스, 변수, 함수에 붙일 수 있다. 클래스의 접근 제어자에는 public, default만 가능하다. 여기서의 내용은 대부분 함수에 대한 이야기이다. public : 외부에서의 모든 접근이 허용된 접근 제어자이다. protected : 같은 패키지에 속해있을때만 호출이 가능하다. 예외적으로 다른패키지에 있더라고 상.. 프로그래밍언어/Java 2020. 8. 23. 파이썬의 특징과 장단점 현재 알고리즘 테스트를 하면서 파이썬을 주로 사용하고있는데 지금 생각해보니 파이썬이 무엇이고 어떻게 동작하는지 장,단점이 무엇인지 명확하게 알고있지 않은것 같아 정리하게 되었다. 1. 파이썬은 인터프리터언어이다. 파이썬은 C,C++등의 소스코드를 기계어로 컴파일해서 실행파일을 만들어 실행하는 컴파일 언어와는 다르게 코드를 한줄씩 읽어 내려가며 실행하는 언어이다. 코드를 한줄씩 읽어나가기 때문에 컴파일언어보다 느리다는 단점을 가지고 있다. 또한 한줄씩 읽어 해석하기 때문에 런타임(자료형) 오류가 난다면 그 위치까지 가야하는 경우가 있었다. 장점으로는 프로그램 수정이 간단하다라는 장점이 있다. 컴파일 언어같은 경우는 프로그램이 수정된다면 소스코드를 다시 컴파일 해야한다. (프로그램의 덩치가 커질수록 컴파일 .. 프로그래밍언어/Python 2020. 8. 13. 이전 1 2 3 다음 💲 광고입니다.