JavaRush /Java Blog /Random-KO /커피 브레이크 #190. 정수를 문자열로 변환하는 방법. Java의 정적 및 비정적 내부 클래스

커피 브레이크 #190. 정수를 문자열로 변환하는 방법. Java의 정적 및 비정적 내부 클래스

Random-KO 그룹에 게시되었습니다

정수를 문자열로 변환하는 방법

출처: FreeCodeCamp 이 튜토리얼에서는 정수를 문자열로 변환하는 여러 가지 방법을 알려줍니다. 커피 브레이크 #190.  정수를 문자열로 변환하는 방법.  Java의 정적 및 비정적 내부 클래스 - 1변수를 한 데이터 유형에서 다른 데이터 유형으로 변환하기 위해 Java 언어는 다양한 방법을 사용합니다. 정수를 문자열로 변환하는 경우 다음 방법 중 하나를 사용할 수 있습니다.
  • Integer.toString() 메소드를 사용합니다 .
  • String.valueOf() 메소드를 사용합니다 .
  • String.format() 메소드를 사용합니다 .
  • DecimalFormat 클래스를 사용합니다 .

Integer.toString()을 사용하여 Java에서 정수를 문자열로 변환하는 방법

Integer.toString() 메서드는 변환할 정수를 매개변수로 사용합니다. 예제 구문:

Integer.toString(INTEGER_VARIABLE)
샘플 코드:

class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        String AGE_AS_STRING = Integer.toString(age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
이 예에서는 정수 age를 생성 하고 값 2 를 할당했습니다 . age 변수를 문자열로 변환하기 위해 이를 Integer.toString() 메서드에 매개 변수로 전달했습니다(Integer.toString(age) ) . 그런 다음 이 새 문자열 값을 AGE_AS_STRING 이라는 문자열 변수에 저장했습니다 . 마지막으로 새 문자열 변수를 다른 문자열과 결합했습니다. "The child is " + AGE_AS_STRING + "years old" . 이제 질문은: 변환 없이 age 변수를 다른 문자열과 연결하면 오류가 발생합니까?

class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        System.out.println("The child is " + age + " years old");
        // The child is 2 years old
    }
}
출력은 정수를 문자열로 변환해야 했던 예제와 동일합니다. 하지만 유형 변환이 실제로 작동했는지 어떻게 알 수 있나요? 이를 위해 getClass() 객체를 사용하여 변수 유형을 확인할 수 있습니다 . 이 같은:

class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        String AGE_AS_STRING = Integer.toString(age);
        
        
        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer
        
        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String
    }
}
이제 age 변수가 생성되었을 때는 Integer 였고 유형 변환 후에는 String이 되었음을 확인할 수 있습니다 .

String.valueOf()를 사용하여 Java에서 정수를 문자열로 변환하는 방법

String.valueOf() 메서드는 문자열로 변환할 변수를 매개변수로 사용합니다.

class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        String AGE_AS_STRING = String.valueOf(age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
위 코드는 이전 섹션의 코드와 유사합니다.
  1. 우리는 age 라는 정수를 만들었습니다 .
  2. 정수 나이를 String.valueOf() 메서드에 매개 변수로 전달했습니다( String.valueOf(age) ) .
이제 getClass() 객체를 사용하여 유형 변환이 작동하는지 확인할 수 있습니다 .

System.out.println(((Object)age).getClass().getSimpleName());
// Integer
        
System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

String.format()을 사용하여 Java에서 정수를 문자열로 변환하는 방법

String.format() 메서드는 형식 지정자와 형식을 지정할 변수라는 두 가지 매개 변수를 사용합니다. 예는 다음과 같습니다.

class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        String AGE_AS_STRING = String.format("%d", age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
        
    }
}
이 예에서는 String.format() 메서드에 "%d"age 라는 두 개의 매개 변수를 전달했습니다 . "%d" 는 포맷되는 변수가 정수임을 나타내는 포맷 지정자입니다. 두 번째 파라미터인 age 는 문자열로 변환되어 AGE_AS_STRING 변수에 저장됩니다 . 변환 전후의 변수 유형을 확인할 수도 있습니다.

System.out.println(((Object)age).getClass().getSimpleName());
// Integer
        
System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

DecimalFormat을 사용하여 Java에서 정수를 문자열로 변환하는 방법

DecimalFormat 클래스는 Java에서 십진수 형식을 지정하는 데 사용됩니다. 다양한 방법으로 사용될 수 있지만 지금은 정수를 문자열로 변환하는 데 사용하겠습니다. 예는 다음과 같습니다.

import java.text.DecimalFormat;

class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        DecimalFormat DFormat = new DecimalFormat("#");
        
        
        String AGE_AS_STRING = DFormat.format(age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
        
        
        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer
        
        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String
        
    }
}
이 코드를 살펴보겠습니다.
  1. 특정 예에서 DecimalFormat 클래스를 사용할 수 있도록 이를 가져왔습니다. import java.text.DecimalFormat; .
  2. 우리는 정수 변수 age 를 만들었습니다 .
  3. 그런 다음 DFormat 이라는 새로운 DecimalFormat 개체를 만들었습니다 .
  4. 객체의 format() 메소드를 사용하여 age를 문자열로 변환했습니다 : DFormat.format(age); .

결론

이 기사에서는 Java에서 정수를 문자열로 변환하는 방법에 대해 설명했습니다. Integer.toString() , String.valueOf() , String.format()DecimalFormat 클래스 의 세 가지 메서드를 사용하는 코드 예제를 보았습니다 . 각 예제에서는 변환 과정과 변환 전후의 변수 데이터 유형을 확인하는 방법을 보여줍니다.

Java의 정적 및 비정적 내부 클래스

출처: 중간 이 기사를 통해 Java의 정적 내부 클래스와 비정적 내부 클래스의 차이점을 알아봅니다. Java에서 비정적 내부 클래스(내부 클래스 또는 내부 객체라고도 함)에는 외부 클래스의 바깥쪽 인스턴스에 대한 암시적 참조가 있습니다. 즉, 외부 클래스의 인스턴스 변수 및 메서드에 액세스할 수 있으며 외부 클래스의 다른 인스턴스와 연결된 내부 클래스의 여러 인스턴스를 만드는 데 사용할 수 있습니다. 다음 코드를 살펴보겠습니다.

class Outer {
    private int x;
 class Inner {
        public void printX() {
            System.out.println(x);
        }
    }
}
Outer outer1 = new Outer();
outer1.x = 5;
Outer.Inner inner1 = outer1.new Inner();
inner1.printX(); // prints 5
Outer outer2 = new Outer();
outer2.x = 10;
Outer.Inner inner2 = outer2.new Inner();
inner2.printX(); // prints 10
여기서 Outer 클래스에는 printX 메소드가 있는 Inner 클래스가 있습니다 . 그리고 차례로 주변 Outer 인스턴스의 x 값을 인쇄합니다 . 이 코드는 두 개의 Outer 인스턴스 ( external1external2 )와 두 개의 Inner 인스턴스 ( inner1inner2 )를 생성하며 각각은 서로 다른 Outer 인스턴스와 연결됩니다 . printX가 inner1inner2를 호출 하면 해당 Outer 인스턴스의 x 값을 인쇄합니다 . 비정적 내부 클래스에는 주변 인스턴스에 대한 암시적 참조가 있으므로 이 참조를 저장하려면 추가 메모리가 필요합니다. 이는 바깥쪽 인스턴스에 대한 암시적 참조가 없고 이 목적을 위해 추가 메모리가 필요하지 않은 정적 내부 클래스보다 메모리 효율성이 낮다는 것을 의미합니다. 반면 정적 내부 클래스는 외부 클래스 인스턴스 변수나 메서드에 액세스할 수 없으므로 해당 기능이 제한됩니다. 외부 클래스와 밀접하게 관련되어 있고 해당 인스턴스 변수나 메서드에 액세스할 필요가 없는 클래스를 정의하려는 경우 유용합니다. 비정적 내부 클래스(내부 클래스 또는 내부 개체라고도 함)는 다른 클래스와 밀접하게 관련되어 있고 외부 클래스의 인스턴스 변수 및 메서드에 액세스할 수 있는 클래스를 정의하려는 경우 유용합니다.

비정적 내부 클래스 사용

비정적 내부 클래스를 사용하려는 몇 가지 상황은 다음과 같습니다.
  1. 내부 클래스가 static 이 아닌 외부 클래스의 인스턴스 변수나 메서드에 액세스해야 하는 경우 . 비정적 내부 클래스에는 외부 클래스의 주변 인스턴스에 대한 암시적 참조가 있으므로 비정적 인스턴스 변수 및 메서드에 직접 액세스할 수 있습니다.

  2. 외부 클래스의 여러 인스턴스와 연관된 내부 클래스의 여러 인스턴스를 정의하려는 경우. 예를 들어, Dialog 클래스 에 대해 비정적 내부 클래스 Button을 생성할 수 있습니다 . 여기서 각 Button 인스턴스는 다른 Dialog 인스턴스 와 연결되어 있으며 Dialog 인스턴스 의 인스턴스 변수 및 메서드에 액세스할 수 있습니다 .

  3. 외부 클래스의 컨텍스트에서만 사용되며 독립적으로 사용되지 않는 클래스를 정의하려는 경우. 비정적 내부 클래스는 외부 클래스에서만 액세스할 수 있으므로 더 캡슐화되어 있으며 의도하지 않은 사용에 덜 취약합니다.

정적 내부 클래스 사용

외부 클래스의 인스턴스 변수나 메서드에 액세스할 필요가 없으면 정적 내부 클래스를 사용할 수 있습니다. 이러한 이유로 외부 클래스의 주변 인스턴스에 대한 암시적 참조가 필요하지 않습니다. 이로 인해 주변 인스턴스에 대한 암시적 참조가 있는 비정적 내부 클래스보다 메모리 효율성이 더 높아집니다. 궤적(모서리)과 교차점(노드)이 포함된 그래프를 디자인해야 한다고 가정해 보겠습니다. NodeEdge 클래스는 Graph 클래스와 밀접하게 관련되어 있으며 Graph 개체 의 컨텍스트에서만 사용됩니다 . 이를 정적 내부 클래스로 정의하면 Graph 클래스 의 일부 이며 독립적으로 사용되지 않는다는 것이 분명해집니다.

public class Graph {

    Map <String, Node> nodeMap;

    public Graph () {
        nodeMap = new HashMap<>();
    }

    static class Node {
        String name;
        List <Edge> edgeList;

        public Node(String name) {
            this.name = name;
            edgeList = new ArrayList();
        }
    }

    static class Edge {
        Node source;
        Node Destination;
        String type;

        public Edge(Node source, Node destination, String type) {
            this.Destination = destination;
            this.source = source;
            this.type = type;
        }
    }
    
}
정적 내부 클래스는 인스턴스 변수나 메서드에 액세스할 수 없습니다. 다음은 정적 내부 클래스가 외부 클래스의 인스턴스 변수나 메서드에 액세스할 수 없다는 사실을 설명하는 예입니다.

class Outer {
    private int x;
static class Inner {
        public void printX() {
            System.out.println(x);  // compilation error: cannot access x
        }
    }
}
이 예제에서 Outer 클래스 에는 전용 인스턴스 변수 x 와 정적 내부 클래스 Inner가 있습니다 . Inner 클래스에는 주변 Outer 인스턴스에서 x 값에 액세스하려고 시도하는 printX 메서드가 있습니다 . 그러나 정적 내부 클래스는 외부 클래스 인스턴스 변수나 메서드에 액세스할 수 없기 때문에 이 코드는 컴파일되지 않습니다. 정적 내부 클래스에서 외부 클래스의 인스턴스 변수나 메서드에 액세스하려면 다음을 수행할 수 있습니다.
  1. 정적 인스턴스 변수 또는 메서드를 만듭니다 . 이렇게 하면 내부 클래스가 외부 클래스 이름(예: Outer.x ) 을 사용하여 이를 참조할 수 있습니다 .

  2. 외부 클래스의 인스턴스를 내부 클래스에 전달하고 필드에 저장합니다. 그러면 내부 클래스는 이 필드를 통해 외부 클래스의 인스턴스 변수나 메서드에 액세스할 수 있습니다.

다음은 이를 수행하는 방법을 보여주는 예입니다.

class Outer {
    private int x;
public void setX(int x) {
        this.x = x;
    }
    static class Inner {
        Outer outer;
        public Inner(Outer outer) {
            this.outer = outer;
        }
        public void printX() {
            System.out.println(outer.x);
        }
    }
}
Outer outer = new Outer();
outer.setX(5);
Outer.Inner inner = new Outer.Inner(outer);
inner.printX();  // prints 5
이 예제에서 Outer 클래스 에는 x 값을 설정하는 비정적 setX 메서드 와 Outer 유형의 외부 필드가 있는 정적 내부 클래스 Inner가 있습니다 . Inner 클래스에는 Outer 인스턴스를 가져와 외부 필드 에 저장하는 생성자가 있습니다 . 그러면 Inner 클래스의 printX 메소드는 external.x 표기법을 사용하여 외부 인스턴스 의 x 필드 에 액세스 할 수 있습니다 .
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION