Hi, Welcome My Blog

편안하게 들렸다 가세요

factory 키워드를 사용하여 하나의 생성자만 있는 클래스는 확장이 안된다.

최근 플러터를 통하여 앱 프로젝트를 만들고 코딩하고있을때 있던 일이였다. 어플에 http통신을 구현할려고 하는데, dart언어에 기본적으로 httpclient 객체가 지원하고 있었다. 그래서 해당 객체의 자식클래스를 만들어서 코딩할려고 할려고 하니 갑자기 에러창이 뜨게 되었다. import "dart:io"; class Custom extends HttpClient {/*****/} //error message /*The class 'Custom' cannot extend 'HttpClient' because 'HttpClient' only has factory constructors (no generative constructors), and 'Custom' has at least one generative constructor. Try implementing the class instead, adding a generative (not factory) constructor to the superclass Custom, or a factory constructor to the subclass....

December 19, 2021

몇몇 타입이 구조체의 맴버변수를 리턴 못하는 이유

코딩하던 도중에, 구조체의 변수값을 리턴하는 함수를 만들던 도중에 있던일을 적을라고 한다. 일단 구조체에 있는 문자열 변수를 읽는 함수를 제작했다 하자. struct A { num : u32, s : String } impl A { fn get_string(&self) -> String { self.s } /***/ } fn main() { let object = A{num : 0,s : String::from("")}; let _copyS = object.get_string(); /***/ } 다른 언어에서 작성하던것처럼 문자열의 getter를 함수로 만들어 놓고 컴파일 해보니 이런 에러가 뜬다....

December 5, 2021

리시버 있는 함수 리터럴 유용한 사용

계기 코틀린으로 코딩하는도중 예전에 쓰던 exposed 프레임워크의 코드줄에서 궁금증이 생겼는데. import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.transactions.transaction object Users : Table() { ... val name = varchar("name", length = 50) ... } transaction { .... .... Users.update({ Users.name eq "city"}) { it[name] = "bob" } } 이라는 코드줄이 있다고 할때, User 싱글톤 객체에 name에 infix 함수인 eq가 있다. 그럼 이걸 update함수 밖에서 써도 될까에서 시작해서 그렇게 작성해서 컴파일 해봤는데. import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.transactions.transaction object Users : Table() { ....

November 25, 2021

코틀린 하면서 느낀 infix 유용함

코틀린으로 spring 프로젝트를 코딩하고 있는데, 데이터베이스를 사용해야해서 JetBrains(코틀린 만든회사)에서 만든 exposed 라는 sql프레임워크를 사용하게 되었다. 그렇게 해당 라이브러리로 테이블 객체를 만들고, select를 수행하는 함수에서 where 문을 추가해야 하는 상황에서 infix 함수를 사용하게 되었다. 일단 예시로 평소에 나는 이렇게 코딩하고 있었다 /* ... ... ... */ data class User : Table() (val name : String,val age : Int,/*..*/) data class NameAndAge(/*..*/) fun selectUser() : List<NameAndAge> { //select 안에 where 관련 기능이 추가된다....

November 23, 2021

c#10에서 추가된거

이번 11월에 netcore 6이 정식버젼이 배포되면서 c#이 10으로 업그레이드 됬다고 하여, 무엇이 바끼었나 보려 가보았다. global using 추가 //example global using System; 해당 지시문이 추가되면, 프로젝트 안에서 어느 파일이든 바로 using이 적용된다. 또한 static, 별칭 지시문도 똑같이 적용이 가능한다고 하낟. global using static System.Console; global using Env = System.Environment; 또한 해당 지시문이 어떤 파일에 있든 상관없이 똑같이 적용되기에, 해당 게시글에선 Program.cs 혹은 globalusings.cs을 생성하여 그곳에 추가하려 권장하고 있다. record structs record라고 c#9에서 추가된 기능에서 좀더 다른 기능이 추가된걸로 보인다....

November 19, 2021

모듈 임포트

러스트로 코딩하는도중, 소스코드를 분리할 필요성을 느껴 별도의 모듈로 만들고나서 임포트 할려고 할때, 해당 프로젝트안의 로컬 모듈들을 어떻게 임포트 하는지, 기억하기 힘들어 따로 이렇게 글을 작성할 필요성을 느꼇다. 러스트에서는 mod라는 키워드가 있는데, 해당 키워드는 두가지의 기능을 수행한다. c++.c#처럼 네임스페이스 비슷한 기능을 한다. 다른 모듈들을 인클루드 한다. 예시로 이런 코드가 있다고 치자 // path : src/main.rs /* similar c++ namespace module { void hello() { std::cout << "hello world" << std::endl; } }; int main() { module::hello(); return 0; } */ mod module { pub fn hello() { println!...

November 4, 2021

trait를 리턴하는 방법

러스트로 코딩하던 도중에 트레이드를 리턴해야하는 함수를 만들어야 하는 상황이 있었다. 그래서 go언어를 코딩하는것과 마찬가지로 리턴타입을 트레이드(go언어에선 인터페이스)로 하여 리턴 하는 함수를 작성후 컴파일 해본적이 있었는데 그때의 일을 적어볼려고 한다. //go 코드 예시 package main import "fmt" type Hi interface { hi() } type String struct { s string } func new_hi(s string) Hi { return &String{s} } func (s *String)hi() { fmt.Println("hi : "s.s) } func main() { var str = "sunken ahn" new_hi(str)....

October 30, 2021

싱글,멀티 스레드 파일 입출력 성능

프로그래밍 하는 도중 파일을 입출력 코드를 작성하는 상황이 있었는데, 여기서 “파일 입출력을 싱글 스레드 그리고 멀티 스레드중 어느것이 나을까?“라고 궁금중이 생겨서, 따로 코드를 작성하고 테스트했던것을 적어볼려고 한다. 우선 나는 어느것이 성능이 좋을지 생각하면서 어떤 프로그램 요구서를 생각하고, 그것에 따라서 작성해보았다. 프로그램 계획 요구 : 랜덤 해쉬값을 생성후, 해당값을 파일이름 그리고 파일내용으로 작성하여 특정폴더에 저장한다. 프로그램은 싱글,멀티스레드 선택값,폴더경로 그리고 파일 생성 갯수값을 인수로 입력받는다 해쉬값을 랜덤으로 생성한다 해당값으로 파일명으로 해서 생성후, 해당 파일에 해당값을 저장 이 행동을 생성 갯수값만큼 반복한다 반복이 완료후의 시간을 측정하고, 출력한다 프로그램 종료 그리고 해당 요구서를 토대로 코틀린으로 작성해보았다....

October 7, 2021

await와 then의 작동 차이

자바스크립트를 공부하다보면 비동기 함수 사용이라고 setTimeout , Promise 그리고 async과 await를 배우게 된다. 허나 이러한 사용법이 있다고 하고, 어떤 상황에 어떻게 써야하는지는 자세히 모르는경우 가 많았고, 그리고 이번에 이 궁금점을 풀기위해 코드를 작성하다가 알게된 내용을 적어볼려고한다. 보통 자바스크립트는 싱글 스레드이기 때문에 비동기api를 이용하여 멀티스레딩을 한다고 이야기를 한다. 결국 비동기로 병렬처리를 하는것처럼 보여도 결국 싱글스레드에서 모든일을 한다는것이다, 그럼 만약 여러 비동기 함수안에 처리시간이 많은 루프가 있으면 어떻게 될까? 해당 궁금점을 알기위해 코드를 작성하기로 마음먹고, 다음과 같은 규칙과 목표를 세웠다....

September 10, 2021

julia-'dot 연산자'

julia에 dot 연산자라고, 배열안의 요소별로 각각 연산해주는것이 있다. 예시로 백터를 생성후 요소값들을 각각 하나씩 더하고 싶을때 보통은 for문등 방법을 사용하는게 보통이다. julia> x = [1,2,3,4,5] #output #5-element Vector{Int64}: # 1 # 2 # 3 # 4 # 5 julia> i = 1 julia> while i <= 5 x[i] = x[i]+2 global i += 1 end julia> x #output #5-element Vector{Int64}: # 3 # 4 # 5 # 6 # 7 허나 julia에서는 dot 연산자를 사용해 한줄코드로 간단하게 사용할수 있다....

July 26, 2021