728x90

String 클래스의 equals()는

상위클래스인 object의 equals를 재정의한 메서드이다.

equals () 는 두 값 자체를 비교한다. 같으면 true, 틀리면 false를 리턴한다. 

 public void compareToCheck(){
        String text ="a";
        String text00 ="a";
        String text01 = new String("a");
        System.out.println(text.equals(text00));
        System.out.println(text00.equals(text01));
        
        
         if(text00 ==text01){
            System.out.println("text00 ==text01");
        } else{
            System.out.println("text00 !=text01");

        }
    }

이렇게 equals 메소드를 이용해 비교했을 때는 모두 같다고 나오지만

== 연산자로 비교시에는 객체의 주소를 비교한다.

 

그결과 다르게 나오는 이유는 자바에서 Constant pool을 이용해서 이다. 

상수값을 모아둔 pool이다. String 클래스는 불변의 immutable한 특징이 있다. 그래서 String클래스를 new 연산자를 이용해 새로운 객체를 생성하지 않는 이상, 리터럴 "" 문자 그대로의 값은 기존 상수값 메모리에 재활용된다. 

(text가 text00으로 대체되고 text는 가비지 콜렉터가 처리할 대상이된다. )

출처:

https://jiwondev.tistory.com/114

 

자바의 String과 Constant Pool

JVM에 관하여 #1. JVM 운영체제와 하드웨어에 독립적인 언어, 1995년 당시 이 개념은 프로그래밍의 혁신이었다. 참고로 자바는 썬 마이크로시스템스가 개발했지만 JVM 명세(Specification)만 따른다면 누

jiwondev.tistory.com

 

compareTo는 정렬할 때 사용한다. 

 

compareTo 매개변수로 넘겨준 String 객체가 알파벳 순으로 앞에 있으면 양수, 뒤에 있으면 음수를 리턴한다. 그리고 알파벳 순서만큼 그 숫자값은 커진다. 

    public void compareToCheck(){
        String text ="a";
        String text2 ="b";
        String text3 = "c";
        System.out.println(text2.compareTo(text));
        System.out.println(text2.compareTo(text3));
        System.out.println(text.compareTo(text3));
    }

 

예시)

value.compareTo(target)

 

1.compareTo(1):0

기존보다 target이 앞에 있는 숫자면 앞에 있는 숫자 만큼 1
2.compareTo(1):1

3.compareTo(2):1

 

기존보다 target이 앞에 있는 숫자면 뒤에 있는 만큼 -1
2.compareTo(3):-1

-- 문자도 마찬가지 알파벳으로 정렬했을 때 기준으로 비교된다. 

tempT:c
valueT:b
tempT.compareTo(valueT):1

 

tempT:a
valueT:c
tempT.compareTo(valueT):-2

 

 

 

 

compareTo<T> 인터페이스를 이용한 최대값, 최소값 구하는 코드

package GodOfJava.src.main.java.d.generic.practice;

//제네릭을 이용해라
public class MaxFinder {


    public static void main(String[] args) {
        MaxFinder maxFinder = new MaxFinder();
        maxFinder.testGetMax();


    }


    public void testGetMax(){



        System.out.println(getMax(1,2,3));
        System.out.println(getMax(3,1,2));
        System.out.println(getMax("a","b","c"));
        System.out.println(getMax("b","c","a"));
        System.out.println(getMax("a","b","c"));

        System.out.println(getMin(1,2,3));
        System.out.println(getMin(3,1,2));
        System.out.println(getMin("a","b","c"));
        System.out.println(getMin("b","c","a"));
        System.out.println(getMin("a","b","c"));




    }

    public <T extends Comparable<T>> T getMax(T ... a){
        T maxT = a[0];
        System.out.println("maxT:"+maxT);
        for (T tempT : a){
            if(tempT.compareTo(maxT) >0) maxT = tempT;
        }
        return maxT;
    }

    public <T extends Comparable<T>> T getMin(T ... a){
        T minT = a[0];

        for (T minA : a){
            if (minA.compareTo(minT) < 0) {
                minT = minA;
            }

        }
        return minT;

    }

}
728x90
728x90

undefined 뜸~

graphql문제~

 

 

const Test1 = () => {

  const [tableNumber, setTableNumber] = useState('')


const CHECKTXID = gql`쿼리함수~~~`

const [
    FindTX,
    { loading: loadingCheckTxid, error: errorCheckTxid, data: dataCheckTxid },
  ] = useLazyQuery(CHECKTXID, {
    variables: {
      where: {
        //테이블번호
        id: Number(tableNumber),
      },
    },
  })



  console.log(tableNumber)
  return (
    <Layout title="Grid">
      <Row>
        <Col breakPoint={{ xs: 12 }}>
          <Card>
          
            <CardBody>
          
       
              <div>
                <Input fullWidth size="Small">
                  <input
                    type="text"
                    placeholder="tx테이블번호"
                    onChange={(e) => setTableNumber(e.target.value)}
              
                  />
               
                  <Button onClick={() => CheckTxid()}>출금txid요청</Button>
                </Input>
              </div>
            </CardBody>
          </Card>
        </Col>
      </Row>
    </Layout>
  )
}
export default Test1

쿼리 에러 뜬 이유!!!

 

input 

type을 text로 잡아놔서 string이 들어가는데

쿼리에도 string으로 id가 잡혀서 였음

 

type을 number로 바꾸거나 ->>>  안됨..

위처럼 id를 number로 감싸야한다.

728x90
728x90

지난 시간,,,

https://stepby-yun.tistory.com/179

 

formData 이미지데이터 보내고 받기 (react,nodejs,header)

회원가입시 아이디 비번 프로필을 등록하려했다. id password는 넘겨주고 req.body.id로 받았는데 프로필은 formData 객체로 묶어서 그자체로 넘겨줬는데 자꾸 undefined 떴다. formData는 req.body가 안된다길

stepby-yun.tistory.com

formData 로 이미지 받는 걸 Header를 뒤늦게 추가해서 넣었다.

이제 mySQL 데이터베이스에 넣으려는데

아무것도 없고  BLOB만 달랑 저장됨

이미지 저장은 보통 BLOB로 한다고 해서 타입을 이렇게 넣었는데 

저렇게만 보이니 당황,, 

 

 

BLOB은 뭘까?

A Binary Large Object (BLOB) is a MySQL data type that can store binary data such as images, multimedia, and PDF files.

바이너리 데이터를 DB외부에 저장하기 위한 타입이다

"blob의 경우 4GB의 이진 데이터를 저장할 수 있다고 합니다. 하지만 이건 DB에 직접 저장하는 것이 아니라 DB에는 Large Object의 위치 포인터만 저장하게 됩니다."

그말은 즉, 컴퓨터가 인식하는 모든 파일(이진 데이터)를 저장하는 타입이라고 한다. 오 찾아보니까 볼 수 있긴하네

이렇게 확인할 수는 있구만 

 

 

하지만 BLOB보다는 URL자체로 저장을 선호한다고 한다.

그 이유는데이터베이스 서버는 애플리케이션이 확장될 때 종종 성능병목 현상이 일어나는데 이미지와 함께 로드하면 더 큰 병목현상이 발생한다고 함.

Many web app designers don't store images in database BLOBS, but rather store them in a file system, and store their URLs in database strings. Why? Database servers often become a performance bottleneck when an application scales up. If you load them with images, they'll become even bigger bottlenecks.

 

그럼 string문자열로 바꿔줘야지~

하고 string찾는데 없어 아 맞다 VAR이지하고 보다가

 

VARCHAR과 CHAR의 차이가 뭔가 궁금해졌다

VARCHAR은 '가변길이'

실질적인 데이터와 길이 정보도 같이 저장된다.

CHAR은 길이가 고정되어있어야한다. 남는 공간은 공백으로 채운다 공간낭비 발생!

VARCHAR is variable length, while CHAR is fixed length

https://petri.com/sql-server-string-data-types/

 

 

 

경로저장함

 

 

 

이제 id랑 password 도 함께 저장해봐야지 

 

 

 

 

 

 

출처

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=magnking&logNo=220950061851

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rlasksdud53&logNo=220595010315

 

 

728x90
728x90

server에서 트랜잭션 풀에 보내주는 코드 

 app.post("/api/sendTransaction", (req, res) => {
    try {
      //객체로 받음 ().뭐시기)
      const address = req.body.address;
      const amount = parseInt(req.body.amount);
      if (address === undefined || amount === undefined) {
        throw Error("invalid address or amount");
      }
      const resp = blockchain_1.sendTransaction(address, amount);
      res.send(resp);
    } catch (e) {
      console.log(e.message);
      res.status(400).send(e.message);
    }
  });

req.body.amout가 

숫자가 아니라 문자여서 

숫자로 반환하려고 parseInt(req.body.amount)

 

 

client

AppWeeklySales.js에서 

 const sendTx = async () => {
    const data = blockData;
    const user = addressData;
    await axios.post(`/api/sendTransaction`, { amount: data, address: user });
  };

보낼주소 ,  보낼값 (amount랑 address에 보낼 것)

 

보낼값이  {[]} 이렇게 배열로 묶어줬었는데

여기서는 객체로 보내줄라고 []배열표기를 뺀거임. 

 

 

728x90

+ Recent posts