Java가 서명되지 않은 int를 지원하지 않는 이유는?
왜 자바는 서명되지 않은 정수에 대한 지원을 포함하지 않는가?
예상외로 큰 입력에서 오버플로를 발생시킬 가능성이 적은 코드를 쓸 수 있게 해준다는 점에서 내가 보기엔 이상한 누락인 것 같다.
더욱이, 서명되지 않은 정수를 사용하는 것은 자기 문서의 한 형태가 될 수 있는데, 이는 서명되지 않은 정수가 보유하려고 의도한 값이 결코 음수가 되어서는 안 된다는 것을 나타내기 때문이다.
마지막으로, 어떤 경우에는 부호화되지 않은 정수가 분할과 같은 특정 작업에 더 효율적일 수 있다.
이것들을 포함하면 어떤 단점이 있을까?
이것은 고슬링과 다른 사람들과의 인터뷰에서 단순함에 관한 것이다.
고슬링:요즘처럼 나 자신을 별로 세지 않는 언어 디자이너로서, J. Random Developer가 스펙을 머릿속에 담아두기를 기대할 수 있을까 하는 것이 정말 "단순하다"는 뜻이었다.그 정의는 예를 들어, 자바 언어는 그렇지 않고, 사실 이런 많은 언어들은 결국 많은 구석진 사례로 귀결되는데, 아무도 정말 이해하지 못하는 것들이었습니다.어떤 C 개발자에게도 서명되지 않은 것에 대해 퀴즈를 내보면, 곧 거의 어떤 C 개발자도 실제로 서명되지 않은 상태에서 무슨 일이 일어나는지, 서명되지 않은 산수가 무엇인지 이해하지 못한다는 것을 알게 될 것이다.그런 것들이 C를 복잡하게 만들었다.자바의 언어 부분은, 내 생각에, 꽤 간단하다.당신이 찾아봐야 할 도서관들.
행간을 읽으면서 논리는 다음과 같았다고 생각한다.
- 일반적으로 Java 설계자들은 이용 가능한 데이터 유형의 레퍼토리를 단순화하기를 원했다.
- 일상적인 목적으로, 그들은 가장 일반적인 필요성은 서명된 데이터 유형이라고 생각했다.
- 특정 알고리즘을 구현하기 위해 서명되지 않은 산술도 필요한 경우가 있지만, 그러한 알고리즘을 구현하는 프로그래머의 종류도 서명된 데이터 유형으로 서명되지 않은 산술을 수행하면서 "작업 라운드"할 수 있는 지식을 가지고 있을 것이다.
대부분, 나는 그것이 합리적인 결정이었다고 말할 것이다.아마도, 나는 다음과 같이 했을 것이다.
- 바이트를 서명되지 않은 상태로 만들거나, 적어도 이 하나의 데이터 유형에 대해 다른 이름을 가진 서명/서명되지 않은 대체 데이터를 제공했다(서명된 바이트를 서명하는 것은 일관성에 좋으나, 언제 서명된 바이트가 필요하십니까?)
- '짧은 길이'를 사용한 후 (16비트 부호 산수를 마지막으로 사용한 때가 언제였습니까?)
하지만, 약간의 슬러징이 있는 상황에서, 32비트까지의 서명되지 않은 값에 대한 운영은 나쁘지 않으며, 대부분의 사람들은 서명되지 않은 64비트 분할이나 비교가 필요하지 않다.
이건 좀 오래된 질문이고, 팻이 샤를 잠깐 언급했었습니다. 나는 단지 앞으로 이것을 볼 다른 사람들을 위해 이것을 확장해야겠다고 생각했을 뿐이었습니다.자바 원시 유형을 자세히 살펴봅시다.
byte
- 8비트 부호 정수
short
- 16비트 부호 정수
int
- 32비트 부호 정수
long
- 64비트 부호 정수
char
- 16비트 문자(부호화되지 않은 정수)
비록 ~일지라도char
지원하지 않다unsigned
산술적으로, 그것은 본질적으로 하나의 것으로 취급될 수 있다.unsigned
정수의산술 연산을 명시적으로 다시 에 캐스팅해야 할 것이다.char
, 그러나 그것은 당신에게 특정할 수 있는 방법을 제공한다.unsigned
숫자의
char a = 0;
char b = 6;
a += 1;
a = (char) (a * b);
a = (char) (a + b);
a = (char) (a - 16);
b = (char) (b % 3);
b = (char) (b / a);
//a = -1; // Generates complier error, must be cast to char
System.out.println(a); // Prints ?
System.out.println((int) a); // Prints 65532
System.out.println((short) a); // Prints -4
short c = -4;
System.out.println((int) c); // Prints -4, notice the difference with char
a *= 2;
a -= 6;
a /= 3;
a %= 7;
a++;
a--;
그렇다, 서명되지 않은 정수에 대한 직접적인 지원은 없다. (확실히, 직접적인 지원이 있었다면 나는 대부분의 업무를 다시 char에 캐스팅할 필요가 없었을 것이다.)그러나 서명되지 않은 원시 데이터 유형이 분명히 존재한다.나는 서명되지 않은 바이트도 보고 싶었지만, 메모리 비용을 두 배로 늘리고 대신 char를 사용하는 것이 실행 가능한 선택이라고 생각한다.
편집
JDK8에는 치료 시 도우미 방법을 제공하는 새로운 API가 있다.long
그리고int
부호 없는 값으로서의 값
compareUnsigned
divideUnsigned
parseUnsignedInt
parseUnsignedLong
remainderUnsigned
toUnsignedLong
toUnsignedString
또한, Guava는 정수의 유형에서 유사한 일을 할 수 있는 여러 가지 도우미 방법을 제공하는데, 이는 에 대한 원주민 지원이 부족하여 남겨진 격차를 줄이는 데 도움이 된다.unsigned
정수
Java는 서명되지 않은 유형 또는 적어도 하나 이상의 유형을 가지고 있다: char는 서명되지 않은 줄임말이다.그래서 고슬링이 어떤 변명을 던지든 그것은 단지 왜 다른 서명되지 않은 타입이 없는지에 대한 그의 무지함일 뿐이다.
또한 짧은 타입: 반바지는 멀티미디어에 항상 사용된다.그 이유는 하나의 32비트 길이에 샘플 2개를 맞추고 많은 작업을 벡터링할 수 있기 때문이다.8비트 데이터와 서명되지 않은 바이트도 마찬가지다.벡터화를 위해 4개 또는 8개의 샘플을 레지스터에 넣을 수 있다.
서명과 서명되지 않은 ints가 표현에 섞이는 순간 모든 것이 뒤죽박죽이 되기 시작하고 당신은 아마도 정보를 잃게 될 것이다.Java를 서명된 인트로 제한하는 것은 실제로 상황을 정리할 뿐이다.나는 가끔 8번째 비트를 바이트 단위로 놓치지만, 서명/서명되지 않은 모든 사업에 대해 걱정하지 않아도 돼서 기쁘다.
http://skeletoncoder.blogspot.com/2006/09/java-tutorials-why-no-unsigned.html
이 남자는 C 표준이 서명되지 않은 인트와 서명되지 않은 인트가 서명되지 않은 것으로 취급되는 작업을 규정하기 때문에 이렇게 말한다.이것은 부호화된 정수가 부호 없는 큰 int로 굴러다니게 하여 버그를 유발할 수 있다.
나는 자바가 있는 그대로 괜찮다고 생각하는데, 서명하지 않은 것을 추가하면 큰 이득 없이 복잡해질 거야.단순화된 정수 모델을 사용하더라도 대부분의 자바 프로그래머들은 기본적인 숫자 유형의 동작에 대해 알지 못한다. 단지 여러분이 어떤 오해를 하고 있는지 알아보기 위해 자바 퍼즐러라는 책을 읽기만 하면 된다.
실무적 조언에 대해서는:
값이 다소 임의적인 크기여서 적합하지 않은 경우
int
, 사용long
. 만약 그들이 맞지 않는다면.long
사용하다BigInteger
.공간을 절약해야 하는 경우 어레이에만 작은 유형을 사용하십시오.
64/32/16/8비트가 정확히 필요한 경우
long
/int
/short
/byte
분업, 비교, 우경화, 캐스팅을 제외하고는 간판 비트 걱정은 그만둬야 한다.
또한 "C에서 Java로 난수 생성기 포팅"에 대한 답변을 참조하십시오.
나는 이 포스트가 너무 오래되었다는 것을 알고 있다. 하지만, 당신이 자바 8과 그 이후에서 당신은 그 포스트를 사용할 수 있다.int
최소 값이 0이고 최대 값이 2-1인32 32비트 정수를 나타내는 데이터 유형.사용Integer
사용할 클래스int
다음과 같은 서명되지 않은 정수 및 정적 방법으로 데이터 유형:compareUnsigned()
,divideUnsigned()
에 추가되었다.Integer
클래스: 부호 없는 정수의 산술 연산을 지원하는 클래스.
JDK8과 함께 그것은 그들을 위한 약간의 지원을 가지고 있다.
우리는 고슬링의 우려에도 불구하고 자바에서 서명되지 않은 유형의 전폭적인 지원을 볼 수 있다.
나는 그들이 Java의 오리지널 발매에 가까이 포함되어야 한다는 이야기를 들었다.오크는 자바의 선구자였고, 일부 사양 문서에서는 used values에 대한 언급이 있었다.불행히도 이것들은 자바 언어로 만들어지지 않았다.누가 알아낼 수 있는 한 그들은 단지 시간적 제약 때문에 실행되지 않았다.
나는 예전에 C++ 표준 위원회의 누군가와 함께 C++ 과정을 수강한 적이 있는데, 그 사람은 자바에게 서명되지 않은 정수를 사용하는 대부분의 프로그램은 서명된 정수를 사용하는 것만큼 잘 할 수 있고, 이것은 사람들이 생각하는 방식에서 더 자연스럽고, (2) 서명되지 않은 정수를 사용하는 것이 훨씬 쉬운 결과를 낳기 때문에 서명되지 않은 정수를 갖지 않도록 올바른 결정을 내렸다고 암시했다.서명된 유형과 서명되지 않은 유형 간에 변환할 때 정수 산술 오버플로 및 중요한 비트 손실과 같은 이슈를 만들기는 어렵지만 디버깅하기 어렵다.서명된 정수를 사용하여 실수로 0에서 1을 빼면 프로그램이 2^32 - 1로 감싼 경우보다 프로그램이 더 빨리 중단되고 버그를 쉽게 찾을 수 있으며 컴파일러, 정적 분석 도구 및 런타임 체크는 부호 없는 산술을 선택한 이후 사용자가 무엇을 하고 있는지 알고 있다고 가정해야 한다.또한 -1과 같은 음수는 종종 유용한 것을 나타낼 수 있다. 예를 들어, 무시/기본 설정/설정 해제되는 필드와 같은 반면, 서명되지 않은 경우 2^32 - 1과 같은 특별한 값을 예약해야 한다.
오래 전, 메모리가 제한되고 프로세서가 한 번에 64비트로 자동 동작하지 않았을 때, 모든 비트는 훨씬 더 많이 계산되었고, 그래서 서명하지 않은 바이트나 반바지와 비교하여 실제로 훨씬 더 자주 중요했고, 분명히 올바른 설계 결정이었다.오늘날에는 서명된 int를 사용하는 것만으로도 거의 모든 정규 프로그래밍 사례에서 충분하며, 만약 당신의 프로그램이 정말로 2^31 - 1보다 큰 값을 사용해야 한다면, 당신은 어쨌든 단지 긴 시간을 원하는 경우가 많다.일단 롱스 사용의 영역에 들어가면, 2^63 - 1 양의 정수로 정말 헤쳐나갈 수 없는 이유를 생각해내기가 더욱 어렵다.우리가 128비트 프로세서에 갈 때마다 그것은 훨씬 덜 문제가 될 것이다.
질문 내용은 "Java가 서명되지 않은 인트를 지원하지 않는 이유" 입니다.
그리고 당신의 질문에 대한 제 대답은 자바가 그것의 모든 원시 타입을 원한다는 겁니다: 바이트, char, 짧음, int, long은 각각 바이트, 워드, dword, qword로 취급되어야 하며, 자바 연산자는 char를 제외한 모든 원시 타입에 대해 서명되어 있지만, 오직 char에만 서명되지 않은 16비트 입니다.
따라서 정적 방법은 32비트 및 64비트 모두에 대해 서명되지 않은 작업으로 가정한다.
서명되지 않은 작업에 대해 정적 방법을 호출할 수 있는 최종 클래스가 필요하다.
이 최종 클래스를 만들고, 원하는 이름을 부르고, 정적 메소드를 구현할 수 있다.
정적 방법을 구현하는 방법을 모를 경우 이 링크가 도움이 될 수 있다.
내 생각에 자바는 서명되지 않은 유형이나 운영자 과부하를 지원하지 않는다면 C++와 전혀 비슷하지 않기 때문에, 자바는 C++와 C 둘 다와 완전히 다른 언어로 취급되어야 한다고 생각한다.
그 언어의 이름 또한 완전히 다르다.
그래서 나는 자바에서는 C와 비슷한 코드를 입력하는 것을 추천하지 않고 C++와 유사한 코드를 입력하는 것을 전혀 추천하지 않는다. 왜냐하면 자바에서는 C++에서 다음에 하고 싶은 것을 할 수 없기 때문이다. 즉, C++에서 코드는 계속되지 않을 것이고, 이것은 나에게 있어서 중간 스타일을 바꾸는 것이 나쁘기 때문이다.
서명된 작업에도 정적 방법을 쓰고 사용할 것을 권해 드리오니, 코드에서 서명된 작업만 필요하지 않다면 서명된 작업과 서명되지 않은 작업 모두에 대한 정적 방법을 코드 혼합에서 볼 수 없고, 운영자만 사용하는 것도 괜찮다.
또한 짧은 원시 유형, int 유형 및 긴 원시 유형을 사용하지 말고 단어, dword 및 qword를 각각 사용하는 것이 좋으며, 연산자를 사용하는 대신 서명되지 않은 작업 및/또는 서명된 작업에 대한 정적 방법을 호출해야 한다.
만약 당신이 서명된 작업만 하고 코드에서만 연산자를 사용하려고 한다면, 이러한 원시 타입은 짧고, 짧고, 길며, 사용해도 괜찮다.
실제로 단어, dword, qword는 언어에 존재하지 않지만 각 클래스를 새로 만들 수 있으며 각 클래스의 구현은 매우 쉬워야 한다.
계급은 원시형만 짧게, 계급은 원시형만 안으로, 계급은 원시형만 길게 잡는다.이제 모든 서명되지 않은 방법과 서명되지 않은 방법을 정적이든 아니든 각 클래스에서 구현할 수 있다. 즉, 서명되지 않은 16비트 작업과 서명된 모든 비트 작업, 단어 클래스에 의미 이름을 지정함으로써 서명되지 않은 32비트 작업, 그리고 문서 클래스에 의미 이름을 지정함으로써 서명되지 않은 모든 64비트 작업 모두d는 qword 클래스에 의미 있는 이름을 붙여 서명했다.
만약 각 방법에 대해 너무 많은 다른 이름을 주는 것을 좋아하지 않는다면, 당신은 항상 자바에서 과부하를 사용할 수 있다. 자바도 그것을 제거하지 않았다는 것을 읽기에 좋다!
8비트 서명 작업에 대한 연산자 대신 메소드를, 연산자가 전혀 없는 8비트 미서명 연산에 대한 메소드를 원한다면 바이트 클래스(첫 번째 문자 'B'는 대문자이므로 이것은 원시 타입 바이트가 아니라는 점에 유의)를 만들어 이 클래스에 있는 메소드를 구현하면 된다.
값 기준 전달 및 참조 기준 전달 정보:
내가 틀리지 않으면 C#에서처럼 원시적인 물체는 자연스레 값으로 전달되지만 클래스 물체는 자연적으로 참조로 전달되기 때문에 바이트, 워드, 드워드, qword 타입의 물체는 기본적으로 값이 아니라 참조로 전달된다는 것을 의미한다.나는 자바에게 C#가 가지고 있는 구조 객체가 있어서 모든 바이트, 워드, 드워드, qword가 클래스 대신 구조물로 구현될 수 있으면 좋으련만, 그래서 그것들은 기본적으로 가치로 전달되고 C#의 어떤 구조 객체와 마찬가지로 기본적으로 참조로 전달되지 않고, 기본값으로 전달되지 않고, 기본적으로 자바도 C#보다 못하기 때문이다.그리고 우리는 그것을 다루어야만 한다. 그러면 참조로 전달되는 클래스와 인터페이스만이 있고, 기본값으로 전달되는 것은 아니다.따라서 바이트, 워드, 드워드, qword 객체를 참조가 아닌 값으로 통과시키려면 자바와 C#의 다른 클래스 객체와 마찬가지로 단순히 카피 생성자를 사용해야 할 것이며 그것이 전부다.
그것이 내가 생각할 수 있는 유일한 해결책이다.그냥 단어, dword, qword에 원시적인 유형을 타이핑하면 좋겠지만, 자바는 C의 타이핑에 해당하는 사용을 지원하는 C#와는 달리 타이프도 전혀 지원하지 않고 사용도 전혀 지원하지 않는다.
출력 정보:
동일한 비트 시퀀스에 대해 여러 가지 방법으로 인쇄할 수 있다.이진수로, 십진수(C printf에서 %u의 의미와 같음), 팔진수(C printf에서 %o의 의미와 같음), 십진수(C printf에서 %x의 의미와 같음) 및 정수(C printf에서 %d의 의미와 같음)로 한다.
C printf는 함수에 매개 변수로 전달되는 변수의 유형을 모르므로, printf는 함수의 첫 번째 매개 변수인 char* 개체에서만 각 변수의 유형을 알고 있다는 점에 유의하십시오.
따라서 각 클래스에서 다음을 수행하십시오.바이트, 워드, dword, qword, 당신은 인쇄 방법을 구현하고 printf의 기능을 얻을 수 있다. 클래스의 원시 타입이 서명되어 있더라도 출력물에 인쇄할 숫자를 얻기 위해 논리적 및 시프트 연산을 포함하는 일부 알고리즘을 따름으로써 당신은 여전히 그것을 서명되지 않은 것으로 인쇄할 수 있다.
불행히도 내가 준 링크에는 이러한 인쇄 방법을 어떻게 구현하는지가 나와 있지 않지만, 나는 당신이 이 인쇄 방법을 구현하는 데 필요한 알고리즘을 검색해 볼 수 있다고 확신한다.
그게 내가 너의 질문에 대답하고 너에게 제안할 수 있는 전부야.
왜냐하면unsigned
활자는 순전히 악이다.
C에서 는 사실unsigned - int
생산하다unsigned
더 악한 짓이야
여기 나를 두 번 이상 불태운 문제의 스냅숏이 있다.
// We have odd positive number of rays,
// consecutive ones at angle delta from each other.
assert( rays.size() > 0 && rays.size() % 2 == 1 );
// Get a set of ray at delta angle between them.
for( size_t n = 0; n < rays.size(); ++n )
{
// Compute the angle between nth ray and the middle one.
// The index of the middle one is (rays.size() - 1) / 2,
// the rays are evenly spaced at angle delta, therefore
// the magnitude of the angle between nth ray and the
// middle one is:
double angle = delta * fabs( n - (rays.size() - 1) / 2 );
// Do something else ...
}
벌레는 벌써 알아챘니?나는 디버거에 발을 들여놓은 후에야 그것을 보았다고 고백한다.
왜냐하면n
서명되지 않은 유형size_t
전체 표현n - (rays.size() - 1) / 2
로 평가하다.unsigned
. 그 표현은 의 서명된 지위가 되기 위한 것이다.n
중앙에서 광선: 왼쪽에서 가운데에서 1번째 광선은 -1, 오른쪽에서 1번째 광선은 +1 등의 위치를 가진다.복근 값과 곱하기delta
각도 나는 사이의 각도를 얻을 것이다.n
그 광선과 중간 광선.
불행하게도 나에게 위의 표현은 서명되지 않은 악을 포함하고 있었고, 예를 들어 -1을 평가하는 대신 2^32-1로 평가했다.후속 변환double
도청기를 봉인했다.
의 오용에 의한 한두 개의 버그 후.unsigned
산술적으로 자신이 얻는 여분의 비트가 여분의 수고를 할 만한 가치가 있는지 궁금해하기 시작해야 한다.나는 가능한 한, 어떤 이용도 피하려고 노력하고 있다.unsigned
2진 마스크와 같은 비반복 연산에 여전히 사용하지만 산술의 유형.
'C' 스펙에는 실용적인 이유로 자바가 떨어졌지만 개발자 수요(폐쇄 등)로 서서히 회복되고 있는 몇 개의 보석이 있다.
첫 번째 것은 이 논의와 관련이 있기 때문에 언급한다; 서명되지 않은 정수 산술에 대한 포인터 값의 고수.그리고, 이 스레드 주제와 관련하여, 서명된 자바 세계에서의 서명되지 않은 의미론들을 유지하는 것의 어려움.
만약 누군가가 Dennis Ritchie의 분신을 Gosling의 디자인 팀에게 조언하도록 한다면, 그것은 Signed's에게 "무한도에서 0점"을 주는 것을 제안했을 것이다. 그래서 모든 주소 오프셋 요청은 먼저 그들의 대수학적 RING SIZE를 추가하여 부정적인 값을 제거하도록 할 것이다.
그렇게 하면 어레이에서 던져지는 오프셋은 절대 SEGFUT를 생성할 수 없다. 예를 들어, 서명되지 않은 동작이 필요한 더블의 링어레이(RingArray)라고 부르는 캡슐화된 클래스에서 - "셀프 회전 루프" 컨텍스트:
// ...
// Housekeeping state variable
long entrycount; // A sequence number
int cycle; // Number of loops cycled
int size; // Active size of the array because size<modulus during cycle 0
int modulus; // Maximal size of the array
// Ring state variables
private int head; // The 'head' of the Ring
private int tail; // The ring iterator 'cursor'
// tail may get the current cursor position
// and head gets the old tail value
// there are other semantic variations possible
// The Array state variable
double [] darray; // The array of doubles
// somewhere in constructor
public RingArray(int modulus) {
super();
this.modulus = modulus;
tail = head = cycle = 0;
darray = new double[modulus];
// ...
}
// ...
double getElementAt(int offset){
return darray[(tail+modulus+offset%modulus)%modulus];
}
// remember, the above is treating steady-state where size==modulus
// ...
위의 링어레이는 악의적인 요청자가 시도하려고 해도 결코 부정적인 지수에서 '가져오지' 않을 것이다.이전(음수) 지수 값을 묻는 정당한 요청도 많다는 점을 명심해야 한다.
NB: 외부 %modulus는 합법적인 요청을 참조하는 반면, 내부 %modulus는 -modulus보다 더 부정적인 부정의 노골적인 악의를 숨긴다.만약 이것이 Java +..에 나타난다면.+9 || 8+..+ 사양, 그러면 문제는 진정으로 '자체 회전'할 수 없는 프로그램 작성자'가 될 것이다.
위의 원라이너로 이른바 자바 미서명 '결핍'을 만회할 수 있을 것이라 확신한다.
PS: 위의 RingArray 하우스키핑에 컨텍스트를 제공하기 위해 위의 'Get' 요소 작동과 일치하는 후보 'set' 작업이 있다.
void addElement(long entrycount,double value){ // to be called only by the keeper of entrycount
this.entrycount= entrycount;
cycle = (int)entrycount/modulus;
if(cycle==0){ // start-up is when the ring is being populated the first time around
size = (int)entrycount; // during start-up, size is less than modulus so use modulo size arithmetic
tail = (int)entrycount%size; // during start-up
}
else {
size = modulus;
head = tail;
tail = (int)entrycount%modulus; // after start-up
}
darray[head] = value; // always overwrite old tail
}
불행한 부작용이 하나 떠오른다.자바 임베디드 데이터베이스에서 32비트 ID 필드로 가질 수 있는 ID 수는 2^32( ~20억, ~40억)가 아니라 2^31이다.
The reason IMHO is because they are/were too lazy to implement/correct that mistake. Suggesting that C/C++ programmers does not understand unsigned, structure, union, bit flag... Is just preposterous.
Ether you were talking with a basic/bash/java programmer on the verge of beginning programming a la C, without any real knowledge this language or you are just talking out of your own mind. ;)
when you deal every day on format either from file or hardware you begin to question, what in the hell they were thinking.
A good example here would be trying to use an unsigned byte as a self rotating loop. For those of you who do not understand the last sentence, how on earth you call yourself a programmer.
DC
ReferenceURL : https://stackoverflow.com/questions/430346/why-doesnt-java-support-unsigned-ints
'IT이야기' 카테고리의 다른 글
Java에서 참조로 문자열을 전달하시겠습니까? (0) | 2022.04.22 |
---|---|
Iterator를 스트림으로 변환하는 방법 (0) | 2022.04.22 |
링크 Javascript에서 문자열 부분 바꾸기 (0) | 2022.04.22 |
Nuxt.js 라우팅 URL(대시 제외) / (0) | 2022.04.22 |
Vuejs는 데이터가 로드된 후에만 하위 구성 요소를 마운트함 (0) | 2022.04.22 |