개념 창고/JAVA

    [Java] 문자열(String) 비교시 equals()와 == 차이

    우선 두 가지의 정의 후에 차이를 보겠습니다.1. “equals” 메서드 원래 equals()의 경우 Object 클래스의 메서드이고이는 == 연산자와 동일하게 주소 값을 비교를 수행하는 메서드 이다. 흔히 문자열 비교를 위해 사용하는 equals()의 경우 String 클래스에서 오버라이딩을 함으로써 문자열 간의 비교가 가능하다.2. “==” 연산자== 연산자의 경우 객체의 주소값을 비교합니다.그래서 비교하는 객체가 동일한 객체인지를 판별합니다.Primitive Type의 객체에 대해서는 값 비교가 가능하고,Reference Type에 대해서는 주소 비교를 수행합니다. 정리하면,Primitive Type의 객체는 Constant Pool의 특정한 값을 참조하는 변수이기에,결국 Constant Pool내..

    [Java] Unsigned int 구현 방법

    자바에서는 C와 같은 언어에서처럼 명시적으로 unsigned int를 지원하지 않습니다. 자바에서는 모든 정수 타입이 부호를 가지며, 음수와 양수를 모두 표현할 수 있습니다. 그러나 구현을 한다면, 버전별로 쉽게 두 가지 방법이 있습니다. 자바 8 이전(기존 방식) long unsignedIntValue = Integer.toUnsignedLong(signedIntValue); Java 8 이후 (Unsigned 클래스 사용) import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; // 부호 없는 int int unsignedIntValue = Integer.toUnsignedInt(si..

    자바 메모리 영역(Method, Stack, Heap)

    자바의 메모리 공간은 크게 Method 영역, Stack 영역, Heap 영역으로 구분되고, 데이터 타입에 따라 할당된다. 메소드(Method) 영역 : 전역변수와 static변수를 저장하며, Method영역은 프로그램의 시작부터 종료까지 메모리에 남아있다. 스택(Stack) 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. LIFO(Last In First Out) 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다. 힙(Heap) 영역 : new 키워드로 생성되는 객체(인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어 진다. 각 메모리 영역이 할당되는 시점 Method ..

    [Java] BigInteger 사용 이유, 형변환, 두 수 비교

    Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int 와 long의 범위로 감당하기 힘든 경우 사용한다. BigInteger은 문자열 형태여서 숫자의 범위가 무한하다. 그러나 BigInteger은 문자열이라 사칙연산이 안되기 때문에 BigIntger 내부의 숫자를 계산하기 위해서는 BigIntger 클래스 내부에 있는 메서드를 사용해야 한다. BigInteger bigNum1 = new BigInteger("100000000000"); BigInteger bigNum2 = new BigInteger("1000000000000000"); System.out.println..

    [Java] char는 사실 문자가 아닌 정수다.

    char는 기본형 타입에서 문자 타입으로 분리되었지만, 사실상 2 바이트의 정수이다. 그 이유는 단순한데, 실제 컴퓨터는 문자를 구별할 수 없다. 즉, 컴퓨터 안에는 모든 것이 숫자만으로 저장되는데 이는 사람과 컴퓨터가 언어를 교환하기 위해서 만들어진 코드로 해석된다. 대표적으로는 아스키코드(ASCII code)와 유니코드(unicode)가 있고, char형 변수의 문자를 선언하게 되면, 해당 문자는 아스키코드의 규칙에 맞게 숫자로 치환이 되어 컴퓨터에 저장된다. * 아스키코드(ASCII code) 1) 미국 표준 부호 체계로 영문자, 숫자, 특수 문자에 고유의 숫자를 부여한 것 2) 7비트의 조합으로 이루어져 총 128(2^7) 개를 사용 3) 영문자만 존재하여 한글과 타 언어는 표현 X -> 이 점을..

    char를 문자열로 변환하는 방법(3가지)

    1. String.valueOf(charrArr) : java.lang.String 클래스의 valueOf() 메서드는 char 배열을 파라미터로 받아 String으로 변환하여 리턴 char a = '반갑'; char b = '습니다'; String str = String.valueOf(a) + String.valueOf(b); System.out.println(str); // 결과 // 반갑습니다 2. Character 클래스의 toString() : Character 클래스의 toString() 메서드를 통해 Char를 String으로 반환 char a = '반갑'; char b = '습니다'; String str = Character.toString(a) + Character.toString(b);..

    [JAVA] 문자열의 위치 찾기 indexOf(), lastlndexOf()

    자바 String의 indexOf()와 lastIndexOf()는 String에서 특정 문자열의 인덱스를 찾는데 사용하는 메서드이다. indexOf(String) : 첫 번째 문자열부터 찾고, 문자열의 시작 index를 리턴. indexOf(String, int) : 시작 위치를 부여, 부여된 위치부터 시작하여 문자열의 위치 index를 리턴 두 메서드 모두 원하는 String 못찾으면 -1을 리턴 한다. String hello = "HelloWorld HelloWorld"; System.out.println(hello.indexOf("World")); System.out.println(hello.indexOf("World", 6)); System.out.println(hello.indexOf("Worl..

    [JAVA] charAt()

    charAt() 문자열에서 특정 위치의 문자가 무엇인지 확인할 수 있는 메서드이다. JAVA String에 속해있다. String str = "Hello World. JAVA String gogo"; char c1 = str.charAt(0); char c2 = str.charAt(7); char c3 = str.charAt(14); char c4 = str.charAt(21); System.out.println("첫번째 문자 : " + c1); System.out.println("일곱번째 문자 : " + c2); System.out.println("열네번째 문자 : " + c3); System.out.println("스물한번째 문자 : " + c4); // 결과 // 첫번째 문자 : H // 일곱번째 ..

    [JAVA] 대소문자 변환 & 비교 (toUpperCase, toLowerCase, equalsIgnoreCase)

    String Class는 문자열을 대문자로 변경하거나 소문자로 변경하는 메소드를 제공한다. 문자열의 모든 문자를 대문자로 변경하거나, 모든 문자를 소문자로 변경할 수 있다. toUpperCase() : toUpperCase()는 문자열을 모두 대문자로 변경한다. upper case는 대문자라는 뜻이다. String s = "Hello World"; System.out.println(str.toUpperCase()); String s1 = "hello world"; System.out.println(str.toUpperCase()); // 결과 // HELLO WORLD // HELLO WORLD toLowerCase() : toLowerCase()는 문자열을 모두 소문자로 변경한다. lower case는..

    [JAVA] legnth / length() / size() 차이 및 사용법

    1. length : 배열의 길이를 알고자 할 때 사용한다. int[] arr = new int[100]; System.out.println(arr.length); // 결과 : 100 2. length() : 문자열의 길이를 알고자 할 때 사용한다. String hello = "HELLO"; System.out.println(test.length()); // 결과 : 5 3. size() : 컬렉션프레임워크(ArrayList, Set 등) 타입의 길이를 알고자 할 때 사용한다. ArrayList hello = new ArrayList(); System.out.println(hello.size()); // 결과 : 0

    인터페이스(interface)

    인터페이스 구현과 형 변환 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있음 Calc calc = new CompleteCalc(); 상속에서의 형 변환과 동일한 의미 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있음 ( cf. extends) 형 변환되는 경우 인터페이스에 선언된 메서드만을 사용가능함 인터페이스가 하는 일 클래스나 프로그램이 제공하는 기능을 명시적으로 선언 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세(specification) 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드..

    추상 클래스

    추상 클래스란? 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스 메서드 선언(declaration) : 반환타입, 메서드 이름, 매개변수로 구성 메서드 정의(definition) : 메서드 구현(implementation)과 동일한 의미 구현부(body) 를 가짐 ({ }) 예) int add(int x, int y); // 선언 int add(int x, int y){ } // 구현부가 있음, 추상 메서드 아님 abstract 예약어를 사용 추상 클래스는 new 할 수 없음 ( 인스턴스화 할 수 없음 ) 추상 클래스 구현하기 메서드에 구현 코드가 없으면 abstract 로 선언 abstract로 선언된 메서드를 가진 클래스는 abstract로 선언 모든 ..