개발지식(14)
-
Scanner vs BufferedReader
목표Java에는 외부(클라이언트)에게서 값을 입력받을 수 있는 대표적인 2가지 방법이 있다. 1. Scanner 2. BufferedReader항상 자바로 알고리즘 풀다보면 입력받을 때 둘의 실행시간 속도가 확연히 차이가 났다. 이번 기회에 둘의 차이를 확실히 알고 넘어가는 게 좋을 거 같아 정리한다. 1. Scanner 특징입력받을 경우, 공백 및 개행 기준으로 읽는다 java.utill 패키지에 속한 클래스이다.원하는 타입으로 읽을 수 있다.버퍼의 기본 크기는 1KB(1024Byte)이다. 2. BufferReader 특징Enter만 경계로 인식함 데이터를 한 번에 읽어와 버퍼에 보관한 후 버퍼에서 데이터를 읽어오는 방식으로 동작하는 클래스이다.java.io 패키지에 속한 클래스이다.String으로만..
2024.10.07 -
[Kotlin] 고차함수
1. 코틀린을 활용한 함수형 프로그래밍 코드를 작성하면서 가변 변수들을 사용하면서 생길 수 있는 문제들을 배제하려는 프로그래밍 방식 1. 고차 함수 고차함수란, 함수를 함수의 매개변수로 받을 수 있고, 함수를 반환할 수 있는 함수이다. 어떤 정수 배열의 원소의 합계를 계산하는 함수를 살펴보자. fun sum(numbers: IntArray): Int { var result = numbers.firstOrNull() ?: throw IllegalArgumentException("Empty array") for (i in 1..numbers.lastIndex) result += numbers[i] return result } fun main() { println(sum(intArrayOf(1, 2, 3)))..
2024.01.07 -
[Kotlin] 클래스와 객체 다루기
1. 클래스 내부 구조 클래스 내부에서는 this 식으로 수신 객체를 참조할 수 있다. 수신 객체의 멤버 안에서 수신 객체의 멤버를 참조할 때는 this를 생략해도 된다. 하지만 this가 꼭 필요한 경우도 있다. 어떤 클래스의 프로퍼티와 메서드 파라미터 이름이 같은 경우, 이 둘을 구분하기 위해 프로퍼티 이름 앞에 this를 사용한다. fun main() { // p: 수신객체 fun showAge(p: Person) = println(p.age) // 프로퍼티 읽기 fun readAge(p: Person) { // 프로퍼티에 쓰기 p.age = readLine()!!.toInt() // 26 입력 } fun showFullName(p: Person) = println(p.fullName()) // 메..
2023.12.31 -
좋은 객체 지향 설계의 5가지 원칙(SOLID)
SOLID 설계원칙은 객체 지향 프로그래밍의 단골 면접 질문 중 하나라고 합니다. 좋은 설계란 시스템에 새로운 요구사항이나 변경사항이 있을 때, 영향을 받는 범위가 적은 구조를 말한다. 그래서 시스템에 예상하지 못한 변경사항이 발생하더라도, 유연하게 대처하고 이후에 확장성이 있는 시스템 구조를 만들 수 있다. 즉, SOLID 객체 지향 원칙을 적용하면 코드를 확장하고 유지 보수 관리하기가 더 쉬워지며, 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로써 프로젝트 개발의 생산성을 높일 수 있다. 이 5가지 원칙들은 서로 독립된 개념이 아니라 개념적으로 연관되어 있다. (1)SRP : 단일 책임 원칙(Single Responsibility Principle) // Before SRP class M..
2023.12.30 -
[Kotlin] 코틀린 함수
1. 코틀린 함수의 구조 코틀린에서 함수가 파라미터를 받지 않는다고 해도 파라미터를 감싸는 괄호는 꼭 있어야 한다. 예를 들어, fun readInt(): Int 와 같은 함수에서는 괄호가 필수적이다. 이는 코틀린의 문법 규칙에 따른 것이다. fun readInt(): Int { return readLine()!!.toInt() } fun main(){ println(readInt()) } 자바 vs 코틀린 자바와 달리 코틀린에서 도달할 수 없는 코드(unreachable code)는 오류가 아니다. 하지만 컴파일러는 경고를 표시하고 IDE는 해당 부분을 강조해주기 때문에 코드 중 일부가 죽은 코드임을 쉽게 알 수 있다. 파라미터 정의는 암시적으로 함수가 호출될 때 자동으로 인자값으로 초기화 되는 지역변..
2023.12.21 -
[Java] 변수와 자료형
변수의 생존기간 변수의 생존기간은 메모리에서 변수가 만들어진 이후 사라지기까지의 기간을 의미한다. 자바에서 개발자가 직접 변수를 생성하지만, 삭제는 JVM이 한다. 따라서 메모리에서 변수가 사라지는 시점을 잘 이해해야 한다!! 먼저 변수는 선언된 시점에 생성된다. 이후 생성된 변수는 자신이 선언된 열린 중괄호({) 의 쌍인 닫힌 중괄호(})를 만나면 메모리에서 삭제된다. { int a ; // 변수 a의 생성 시점 { a = 3; } } // 변수 a의 소멸 시점 자료형 JVM은 메모리를 효율적으로 관리하기 위해 메모리를 크게 메서드 영역, 스택 영역, 힙 영역으로 나눠 사용한다. 우리가 옷을 정리할 때 상의, 하의, 속옷등을 다른 서랍에 보관하는 것과 같은 원리다! 특히 메모리의 메서드 영역은 클래스,..
2023.12.20