반응형

Kotlin에서 Class는 객체지향 프로그래밍의 기본 요소입니다. Class는 데이터와 이를 다루는 함수들을 묶어서 캡슐화하고, 관련 있는 메서드와 속성을 함께 묶어서 구성합니다. 또한, Class를 통해 생성된 객체는 인스턴스라고 하며, 객체는 독립적인 메모리 공간을 가지고 있어서 서로 영향을 주지 않습니다.

Kotlin에서 Class를 선언할 때는 "class" 키워드를 사용합니다. 아래는 Kotlin에서 Class를 선언하는 예시입니다.

class Person {
    var name: String = ""
    var age: Int = 0

    fun sayHello() {
        println("Hello, my name is $name and I'm $age years old.")
    }
}

위 예시에서는 "Person"이라는 Class를 선언했으며, Class 내부에는 "name"과 "age"라는 변수와 "sayHello()"라는 함수가 포함되어 있습니다.

Class를 사용하면 코드의 재사용성이 높아지고, 유지보수가 용이해집니다. 또한, 객체지향 프로그래밍에서는 상속을 통해 기존 Class를 확장할 수 있으므로 코드의 재활용성이 더욱 높아집니다.

Kotlin에서는 Class를 선언할 때 추가적으로 상속을 지정할 수 있습니다. 상속을 위해서는 콜론 ":"을 사용하며, 상속할 부모 Class를 지정합니다. 예를 들어, 아래와 같이 Person Class를 상속받는 Student Class를 선언할 수 있습니다.

class Student : Person() {
    var grade: Int = 0
    var major: String = ""

    fun introduce() {
        println("I'm a student, my grade is $grade and my major is $major.")
    }
}

위 예시에서는 Person Class를 상속받는 Student Class를 선언했습니다. Student Class 내부에는 "grade"와 "major"라는 변수와 "introduce()"라는 함수가 추가되어 있습니다.

이처럼 Kotlin에서는 Class를 사용하여 객체지향 프로그래밍을 구현할 수 있습니다.

반응형
반응형

코틀린 시작하기

코틀린의 특징

  • Java와 형태는 다르나 의미가 유사한 문법을 가지고있기때문에 Java개발자라면 쉽게 학습이 가능하다.
  • 클래스 상속 없이 클래스에 도메인 특화 편의 메소드 추가가 가능하고, 오리지날 클래스의 메소드터럼 사용할 수 있다.
  • 델리게이션을 지원해서 상속보다 더 좋은 디자인이 가능하다. 델리게이션은 타입 안정적으로 사용할 수 있다.
  • if-else 문 대신 argument-matching문법을 사용할 수 있다.
  • 이미 존재하는 함수를 확장하는것이 쉽게 가능하다. 기본 파라미터 기능이 있다.
  • 명시적 인자 사용이 가능하다.
  • 연산자 오버로딩이 가능하다.
  • 우아하고, 표현력이 강하고, 간결하다.
  • C스타일의 프로시저, 스칼라 스타일의 스크립트, Java같은 객체지향형 코드, 스몰톡/얼랭과 같은 함수형 스타일 코드 모두 사용 가능하다.
  • 코루틴과 컨티뉴에이션으로 비동기 프로그래밍 영역에서 혁신을 이끌고 있다.

코틀린이 좋은 이유(와 나의 생각)

  • 다양한 프로그래밍 패러다임
    • 객체지향,함수형, 절차지향, 스크립트, 비동기 프로그래밍 등 다양한 프로그래밍 페러다임을 제공하기때문에 그중 상황에 맞는 방식을 사용하면된다.
    • 보일러 플레이트 코드가 없다.
    • 더 적은 코드로 동일한 일을 할 수 있다.
  • 타입 추론으로 사용하는 정적 타입
    • 강력한 타입 추론을 해주기때문에 시간낭비할 필요가 없다.
    • 타입 추론이 명확하지 않은 경우 개발자에게 타입 명시를 요청한다.
    • 널러블 / 널불가 타입이 구분되어있다.
  • 풀스택 개발을 위한 히나의 언어.
    • 한번의 코드 작성으로 백엔드, 모바일, 네이티브, 웹어셈블리 등의 코드로 컴파일(혹은 트랜스파일)이 가능하다.
    • ( 가능하긴하나 아직 적극적으로 사용하긴 조금 어려운 부분이 있지 않은가 하는 생각이 든다.)
  • 자연스럽고 우아함
    • 보일러플레이트 코드가 필요 없다.
    • 세미콜론이 옵셔널이다
    • 인픽스 어노테이션 사용이 가능하다.

코틀린 설치 및 사용

  • 인텔리J를 사용중이라면 함게 설치되어있다.
  • 별도로 설치를 원하면 https://kotlinlang.org 에서 다운로드 및 설치할 수 있다. 자세한 설치방법은 공식 홈페이지를 참고하도록하자.

설치 확인

cli에서 다음과 같이

kotlinc-jvm -version

본인의 경우는
info: kotlinc-jvm 1.4.31 (JRE 15.0.2+7)
이렇게 출력이 나왔다.

우리가 늘 하는 Hello World 만들기

적절한 폴더에 hello.kt라는 파일을 만들고 아래와 같이 코드를 넣어본다.

//hello.kt
fun main() = println("Hello World")

cli로 실행시키기

kotlinc-jvm hello.kt -d hello.jar

위 명령어를 실행시키면 hello.kt 코틀린 코틀린코드를 Java바이트 코드로 컴파일시키고 hello.jar를 만들어둔다.
jar를 java툴을 이용해서 실행시키면된다.

java -classpath hello.jar HelloKt

hello.kt는 main함수만 가지고있고, 클래스가 아니기때문에 코틀린 컴파일러가 자동으로 확장자를 제거한 파일 이름을 가지고 Kt라는 접미사를 추가한 클래스이름을 만든다.

실행결과는 당연히
Hello World가 나온다.

classpath cli옵션을 열거하지않고, jar옵션으로 실행 가능하다. main()함소를 찾을때 코틀린 컴파일러가 jar 파일에 Main-Class 매니패스트 어트리뷰트를 추가한다.

java -jar hello.jar

현재는 코틀린 스탠다드 라이브러리를 사용하지 않았기 때문에 실행이 잘 되지만 코틀린 스탠다드 라이브러리의 클래스와 함수들을 사용하는 경우 java툴로만 실행한다면 java.lang.NoClassDefFoundError예외가 발생하면서 실패한다. 이를 방지하기위해서는 kotlin-stdlib.jar파일을 클래스패스에 추가해줘야한다.

kotlinc-jvm hello.kt -d hello.jar
java -classpath hello.jar:$KOTLIN_PATH/lib/kotlin-stdlib.jar HelloKt
//위도우인경우 %KOTLIN_PATH% 를 사용, 콜론(:)이 아닌 세미콜론(;)으로 구문해야한다. 등록된 환경변수를 사용하면된다.

ide로 실행하기

코틀린 공식 홈페이지 및 각 ide의 홈페이지와 라이브러리를 참고하면 될거같다. 여기서는 굳이 언급하지 않도록하겠다.

REPL실험

cli에서 kotlinc-jvm 이라고 입력하면 REPL이 실행된다.
아래와같이 조금 사용해보자.

//kotlinc-jvm
Welcome to Kotlin version 1.4.31 (JRE 15.0.2+7)
Type :help for help, :quit for quit
>>> 7 + 5
res0: kotlin.Int = 12
>>> val list = listOf(1,2,3)
>>> list.map{ it * 2}
res2: kotlin.collections.List<kotlin.Int> = [2, 4, 6]
>>>

종료할땐 컨트롤D 를 사용하거나 :quit 라고 입력한다.

REPL에선 이미 존재하는 코드를 불러와서 실행시킬수도 있다.

kotlinc-jvm

Welcome to Kotlin version 1.4.31 (JRE 15.0.2+7)
Type :help for help, :quit for quit
>>> :load hello.kt
>>> main()
Hello World!
>>>

이렇게 REPL에선 존재하는 코드를 컴파일 없이 실행할 수 있다.

스크립트로 실행하기

코틀린은 스크립트로 사용가능하다. 여타 스크립트에 비해서 좋은점이라면 스크립트를 위해 따로 문법 공부를 할 필요가 없다는 점이 있을것이고, 코틀린 스크립트는 문법 오류가 있는 경우 스크립트 실행 전에 실패를하기때문에 컴파일 후 칠행하는것 만큼 안전하다.

연습을 위해서 디렉토리에서 .kts 확장자를 가진파일을 리스팅 하는 스크립트를 만들어보자.

//listktsfile.kts
java.io.File(".")
    .walk()
    .filter { file -> file.extension =="kts" }
    .forEach { println(it) }

지금까지 작성한 코틀린 파일과 별반 타이가 없다. 차이점이라면 확장자가 kts라는것 뿐이다.
이 코드는 JDK의 java.io 패키지의 File 클래스를 사용한다. 그리고 코틀린이 해당 클래스에 추가한 확장 함수를 사용한다.
현재 디렉토리에 있는 모든 파일중 파일명이 kts로 끝나는 파일만 걸러내서 잡고 해당 파일의 경로를 출력한다.

스크립트 실행을 위해선 kotlinc-jvm 커맨드를 사용한다. -script옵션을 통해서 컴파일 대신 스크립트로써 즉시 실행시킨다.

kotlinc-jvm -script listktsfiles.kts

Unix-Like 시스템을 사용한다면 kotlinc-jvm -script라는 접미어 대신 셔뱅(shebang)을 사용하면된다.

greeting.kts

#!/ust/bin/env kotlin-jvm -script
println("hello")

실행을위해 chmod +x greeting.kts 명령어로 파일에 실행권한을 주고 아래의 커맨드라인을 통해 스크립트를 바로 시킬 수있다.

./greeting.kts

시스템에 따라 /usr/bin/env 대신 kotlinc-jvm이 위치한 전체경로를 써줘야 하는 경우도 있다.

다른 타깃으로 컴파일하기

코틀린은 여러개의 타깃으로 컴피일이 가능한 언어이다.

  • 안드로이드
  • javascript로 트랜스파일
  • 네이티브 타깃(iOS, Linux, MacOS, Windows 등 네이티브 타겟)
  • WebAssembly

어떤 옵션을 선택해야할까?

코틀린은 실행시킬때 특정 옵션 설정을 강제하지 않기때문에 개발자의 요구사항과 선호도에 따라 실행옵션을 선택하면된다.
아래는 옵션 선택시 고려해야할 사항이다.

  • JVM에서 실행시키거나 Java또는 다른 언어와 함께사용하는경우 --> kotlinc-jvm을 이용한다.
  • 여러개의 코틀린 파일을 통합해 하나의 코틀린 프로그램으로 실행시켜야한다 -> kotlin툴을 이용한다.
  • 시스템레벨 / 백엔드 태스크 수형해야한다 -> 스크립트

정리

코틀린의 특징에 대해 알아보았고, 간단한 코드를 작성해보았다. 다음번엔 코틀린의 특징을 좀더 자세하게 알아보고 좀더 많은 코드를 작성해본다.

 

영진닷컴 - 다재다능 코틀린 프로그래밍 - 스프링 분철선택

COUPANG

www.coupang.com

쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.

반응형

'웹프로그래밍 > Kotlin' 카테고리의 다른 글

[KOTLIN] CLASS  (0) 2023.02.25
[코틀린KOTLIN 정리]0. 들어가며  (0) 2021.06.02
반응형

앞으로 코틀린에 대한 정리 글을 좀 올려보려합니다. 
정리는 영진닷컴에서 출판한 다재다능 코틀린 프로그래밍 서적을 기반으로 제가 이해한 내용을 정리합니다. 

 

 

 

 

영진닷컴 - 다재다능 코틀린 프로그래밍 - 스프링 분철선택

COUPANG

www.coupang.com

쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.

반응형

'웹프로그래밍 > Kotlin' 카테고리의 다른 글

[KOTLIN] CLASS  (0) 2023.02.25
[코틀린 KOTLIN 정리]01.코틀린 시작하기  (0) 2021.06.02
반응형

스프링부트를 코틀린 + 마리아디비 조합으로 사용하려고하는데 Mysql에 비해 MariaDB는 자료가 없어서 고생을했다. 
특히 gradle보다는 maven자료가 훨씬 많아서 찾기가 어려웠다. 
나는 아마도 다음에 이런 삽질을 또 할가능성이 크기때문에 여기에 남겨놓는다.

스프링 이니셜라이저에서 코틀린 / 웹 / JPA조합으로 생성했다. 

실행해보니  오류가 발생해서 구글링 후 실행에 성공시켰다. 
변경한 파일은 2개이다. 

application.properties /  build.gradle 두 파일이다. 

먼저 build.gradle이다. 

dependencies {
	implementation("org.springframework.boot:spring-boot-starter-data-jpa")
	implementation("org.springframework.boot:spring-boot-starter-web")
	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
	implementation("org.jetbrains.kotlin:kotlin-reflect")
	implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
	testImplementation("org.springframework.boot:spring-boot-starter-test") {
		exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
	}

//이부분을 추가 {
	implementation("org.mariadb.jdbc:mariadb-java-client:2.1.2")
// }
}

 

build.gradle 파일에 mariadb 클라이언트 추가 후 그래이들을 새로고침 해주고 application.properties 파일을 수정해주면된다.

spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/[DB명]?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=[DB유저]
spring.datasource.password=[비밀번호]

spring.jpa.show-sql=true

 

반응형
반응형

MSSQL 에서 특정 테이블에서 사용하는 SP를 찾는 쿼리

SELECT
    DISTINCT O.NAME
FROM
    SYSDEPENDS AS D
INNER JOIN
    SYSOBJECTS AS O
ON
    D.ID = O.ID
WHERE
    O.XTYPE = 'P'
    AND D.DEPID =
        (
            SELECT
                ID
            FROM
                SYSOBJECTS
            WHERE
                NAME = '테이블명'
        )

출처: https://jwoojeong.tistory.com/entry/특정-테이블을-사용하는-STORED-PROCEDURE-찾기 [기차나의 '지식 공유 창고']

. 테이블이 정의된 CATEGORY와 동일한 CATEGORY 내에 존재하는 STORED PROCEDURE만 찾을 수 있다

반응형
반응형

[JavaScritpt] var, let, const란


들어가며....

  • 소스를 봤는데 스크립트부분에 뜬금없이 let이란게 튀어나오길래 이게 뭔가 싶어서 알아보기 시작했다.

선요약 : ES6(es6 , 에크마 스크립트?) 에서 새로 생긴 녀석임 변수를 선언하는 방법임 /  var보다는 let / const를 사용하자

 

특징 var vs let / const

 
var
let/cont
비고
변수 선언 전 접근가능(undefined가 리턴됨)불가능
console.log(foo); // 에러
//---------------------------
console.log(foo); //undefined
var foo;      // 선언보다 사용을 먼저하려고해도 코드는 작동한다. 
              //이현상이 궁금하면 호이스팅(Hoisting)을 알아보도록하자
  
//---------------------------
console.log(foo)     //에러
let foo;       
변수 중복선언가능불가능
var foo = 'aa';
var foo = 'bb';       //가능
let foo = 'qwe';
let foo = 'asd';    //에러
스코핑유효범위가 블록{}을 넘어선다유효범위가 블록{}안이다
var foo = 'aa'
console.log(foo)    // aa
if(true) {
  var foo = "bb"
  console.log(foo) // bb
}
console.log(foo) //bb
let foo = "aa"
console.log(foo)    //aa
if(true){
  let foo = "bb"
  console.log(foo)   //bb
}
console.log(foo)    // aa 
  

 

let과 const의 차이

  • const는 이름만 봐서는 상수라고 보인다.
  • 실제로 원시형(Primitives type : string, number , boolean, null, undefined)에서는 상수로 동ㅈ가한다. 
  • 그래서 초기값을 설정하지않거나, 재할당하려고하면 에러가난다. 
  • const foo ;    //에러
    ----------------------
    const foo = 0 ;
    foo = 1 ;   //에러
      
  • 참조형( Complex type: array, object, function)의 경우는 const로 선언해도 멤버값 조작이 가능하다.
  • const foo = [0, 1];
    const bar = foo;
      
    foo.push(2);
    bar[0] = 10;
      
    console.log( foo, bar)      //[10, 1, 2] , [10, 1, 2]
  • 위에서처럼 bar는 foo를 참조한다. 참조가아니고 copy하고싶으면  array는 ...연산자를 사용하고, object는 assign() 함수를 사용한다.
  • const arg = [0, 1];
    const obj = {foo: 'bar'};
      
    const newArg = [...arg];
    const newObj = Ojbect.assign({}, obj);
      
    newArg[0] = 10;
    newObj.foo = 'rab';
      
    console.log(arg, obj);
    // [0, 1], {foo: 'bar'}
      
    console.log(newArg, newObj);
    // [10, 1], {foo: 'rab'}

결론적으로 

  • ES6 에서는 var는 지양하고 가급적 let과 const를 사용하자
  •  원시형에서 변수는 let, 상수는 const로 선언한다
  • 참조형은 const로 선언한다


반응형
반응형

[ajax]radio.value udefined오류 


ajax를 사용할때 radio.value를 사용할경우 undefinded값이 뜬다.


예를들어 


<form name=frm>

<input type=radio name=rad value=1/>

<input type=radio name=rad value=2/>

</form>


이런식일경우 

var frm = document.frm;

$.ajax({

 type:"post",

 url: myurl ,

 async: true,

 data: {

    rad : frm.rad.value

  },

 success{

  //  dosomething

 }

});



이렇게 코드를 짜면 브라우저에 따라서 정상적으로 선택된 radio value를 넘겨주는 경우도 있지만 

undefined가 나는 경우도 생긴다.

이경우 오류잡느라 1시간 반 걸리니 주의하자.

반응형
반응형

1. jQuery로 선택된 값 읽기

 

$("#selectBox option:selected").val();

$("select[name=name]").val();

 

2. jQuery로 선택된 내용 읽기

 

$("#selectBox option:selected").text();

 

3. 선택된 위치

 

var index = $("#test option").index($("#test option:selected"));

 

4. Add options to the end of a select

 

$("#selectBox").append("<option value='1'>Apples</option>");

$("#selectBox").append("<option value='2'>After Apples</option>");

 

5. Add options to the start of a select

 

$("#selectBox").prepend("<option value='0'>Before Apples</option>");

 

6. Replace all the options with new options

 

$("#selectBox").html("<option value='1'>Some oranges</option><option value='2'>MoreOranges</option>");

 

7. Replace items at a certain index

 

$("#selectBox option:eq(1)").replaceWith("<option value='2'>Someapples</option>");

$("#selectBox option:eq(2)").replaceWith("<option value='3'>Somebananas</option>");

 

8. 지정된 index값으로 select 하기

 

$("#selectBox option:eq(2)").attr("selected", "selected");

 

9. text 값으로 select 하기

 

$("#selectBox").val("Someoranges").attr("selected", "selected");

 

10. value값으로 select 하기

 

$("#selectBox").val("2");

 

11. 지정된 인덱스값의 item 삭제

 

$("#selectBox option:eq(0)").remove();

 

12. 첫번째 item 삭제

 

$("#selectBox option:first").remove();

 

13. 마지막 item 삭제

 

$("#selectBox option:last").remove();

 

14. 선택된 옵션의 text 구하기

 

alert(!$("#selectBox option:selected").text());

 

15. 선택된 옵션의 value 구하기

 

alert(!$("#selectBox option:selected").val());

 

16. 선택된 옵션 index 구하기

 

alert(!$("#selectBox option").index($("#selectBox option:selected")));

 

17. SelecBox 아이템 갯수 구하기

 

alert(!$("#selectBox option").size());

 

18. 선택된 옵션 앞의 아이템 갯수

 

alert(!$("#selectBox option:selected").prevAl!l().size());

 

19. 선택된 옵션 후의 아이템 갯수

 

alert(!$("#selectBox option:selected").nextAll().size());

 

20. Insert an item in after a particular position

 

$("#selectBox option:eq(0)").after("<option value='4'>Somepears</option>");

 

21. Insert an item in before a particular position

 

$("#selectBox option:eq(3)").before("<option value='5'>Someapricots</option>");

 

22. Getting values when item is selected

 

$("#selectBox").change(function(){

           alert(!$(this).val());

           alert(!$(this).children("option:selected").text());

});

반응형

'웹프로그래밍 > jQuery' 카테고리의 다른 글

jQuery 로 이미지 사이즈 구하기  (0) 2015.04.01
[jQuery] replace 사용시 팁  (0) 2014.07.16
반응형

MSSQL 에서 Getdate()함수로 얻은 포맷 자유로이 변환하기

--Getdate()
Select Getdate()

--YYYY/MM/DD
Select Convert(varchar(10),Getdate(),111)

--YYYYMMDD
Select Convert(varchar(10),Getdate(),112)

--HH:MM:SS
Select Convert(varchar(8),Getdate(),108)

--HH:MM:SS:mmm
Select Convert(varchar(12),Getdate(),114)

--HHMMSS
Select Replace(Convert(varchar(8),Getdate(),108),':','')

--HHMMSSmmm
Select Replace(Convert(varchar(12),Getdate(),114),':','')

--YYYY/MM/DD HH:MM:SS
Select Replace(Convert(varchar(30),Getdate(),120),'-','/')

--YYYY/MM/DD HH:MM:SS
Select Replace(Convert(varchar(30),Getdate(),121),'-','/')

--YYYY/MM/DD HH:MM:SS
Select Convert(varchar(10),Getdate(),111) + Space(1) + Convert(varchar(8),Getdate(),108)

--YYYYMMDDHHMMSS
Select Convert(varchar(10),Getdate(),112) + Replace(Convert(varchar(8),Getdate(),108),':','')



출처:http://egloos.zum.com/aslike/v/1627250

반응형
반응형

[ASP Classic]ASP  배열 반복문 사용


JAVA와 ASP를 같이 사용하다보면 했갈리는게 제법 있습니다.

자바로 예를들어서 

int[] arr = new int[3];


for( int i = 0 ; i < arr.length ; i++){

  //do someting

같은 반복문을 쓰고싶은데 

ASP로 사용할려면 문법이 많이 다르기때문에 생각이 잘 안나는 경우가 있습니다.


그럴떄 참고하려고 포스팅을 남겨놓습니다.


ASP CODE


Dim arr(5)


For i to Ubound(arr)

'do something

Next

반응형

+ Recent posts