Programming 9

프로그래밍과 알고리즘 공부 방법 - 김창준님

퍼온이의 생각 이 글은 월간 마소 2002년에 기고된 김창준 님의 "어떻게 공부할까: 프로그래머를 위한 공부론"이라는 기사 내용입니다. 해당 글을 읽고 나서 많은 생각을 하였고 개발자로 성장하는데 많은 길잡이가 된 글이었습니다. 그래서 이 좋을 글을 퍼와서 포스팅합니다. 프로그래밍과 알고리즘 공부 방법 우리 프로그래머들은 항상 공부해야 합니다. 우리는 지식을 중요하게 여깁니다. 하지만 지식에 대한 지식, 즉 내가 그 지식을 얻은 과정이나 방법 같은 것은 소홀히 여기기 쉽습니다. 따라서 지식의 축적과 공유는 있어도 방법론의 축적과 공유는 매우 드문 편입니다. 저는 평소에 이런 생각에서 학교 후배들을 위해 제 자신의 공부 경험을 짬짬이 글로 옮겨놓았고, 이번 기회에 그 글들을 취합, 정리하게 되었습니다. 그..

Programming 2020.11.23

case class (케이스 클래스)

스칼라에서는 case class라는 클래스를 제공합니다. case class는 클래스와 유사하지만 약간의 차이가 존재합니다. 기본적으로 불변이며 불변 데이터를 모델링하기에 좋습니다. 또한 개발자들이 이러한 모델링을 위해 작성해야 하는 보일러플레이트 코드(boilerplate code)를 제공해줍니다. 그럼 예제를 통해 살펴보겠습니다. case class Book(id: Int, title: String, isbn: Long) case class는 위와 같이 class 선언시 앞에 case라는 키워드를 붙여서 생성합니다. 그럼 위와 같이 생성을 하게 되면 어떤 코드가 나오는지 살펴보겠습니다. 위의 case class를 scalac로 컴파일한 후 javap 커맨드를 이용해서 디컴파일을 하면 아래의 코드를 확..

Programming/Scala 2019.11.17

스칼라 퓨처(Future)와 동시성(Concurrency) - 2

이전 포스트에 이어서 스칼라 Future의 다른 사용법에 대해 살펴보도록 하겠습니다. Future 실패 처리하기 스칼라 Future는 실패한 퓨처를 다룰 수 있는 failed, fallBackTo, recover, recoverWith 메소드를 제공합니다. failed Future[T]에서 실패한 Future를 예외를 저장한 Future[Throwable] 타입의 성공한 Future로 바꿔줍니다. scala> val failure = Future { 42 / 0 } failure: scala.concurrent.Future[Int] = ... scala> failure.value res23: Option[scala.util.Try[Int]] = Some(Failure(java.lang.Arithmetic..

Programming/Scala 2019.08.17

스칼라 퓨처(Future)와 동시성(Concurrency) - 1

오늘 멀티 코어 프로세서가 대중화되면서 동시성에 대한 관심도 많이 늘어났습니다. 이러한 동시성 프로그래밍을 위해서 기존의 프로그래밍 언어들을 블로킹을 사용하여 동기화함으로써 동시성을 지원합니다. 자바의 경우도 마찬가지로 공유 메모리와 락을 기반으로 동시성을 지원하고 있습니다. 그러나 이러한 블로킹을 사용한 동기화의 경우 Deadlock이나 Starvation과 같은 문제가 발생할 수 있습니다. 이렇게 블로킹 기반의 동시성 처리는 이러한 어려움이 있습니다. 그래서 비동기적 프로그래밍을 사용하면 이러한 블로킹을 없앨 수 있습니다. 비동기적(asynchronous) 프로그래밍이란 아래의 그림과 같이 메인 프로그램의 흐름이 있고 이와 독립적으로 실행되는 프로그래밍 스타일을 의미합니다. 스칼라에서는 이러한 비동기..

Programming/Scala 2019.08.16

동시성(Concurrency) vs 병렬성(Parallelism)

서점에 가면 다양한 언어별로 동시성을 다루는 책들을 많이 볼 수 있습니다. 프로그래밍을 하다 보면 이러한 동시성 처리가 필요한 경우가 있습니다. 그런데 동시성이라는 말을 종종 병렬성과 혼동되어 사용하는 경우가 있습니다. 그래서 이번에 한번 정리를 해볼까 합니다. 동시성(Concurrency) vs 병렬성(Parallelism) 동시성병렬성동시에 실행되는 것 같이 보이는 것실제로 동시에 여러 작업이 처리되는 것싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식한번에 많은 것을 처리한번에 많은 일을 처리논리적인 개념물리적인 개념 먼저 동시성과 병렬성의 차이를 표로 살펴보았습니다. 그러나 표로만 봐서는 조금 잘 안 와닿는 ..

다형성 (Polymorphism)

다형성이란? 다형성은 상속과 함께 객체지향 언어의 중요한 특징중 하나이다. 다형성은 상속과 관계가 있기 때문에 앞선 포스팅에 있는 상속을 미리 읽어 보는 것을 추천한다.객체지향에서 다형성의 의미는 '다양한 형태의 객체를 참조할 수 있는 것'을 의미한다. 자바에서는 한 타입의 참조 변수를 이용하여 여러 가지 타입의 객체를 참조할 수 있도록 기능을 제공하여 다형성을 제공하고 있다. 결론부터 말하면, 부모 클래스 타입의 참조 변수를 이용하여 자식 클래스의 인스턴스를 참조할 수 있다는 것이다. class Tv { boolean power; int channel; void power(); void channelUp(); void channelDown(); } class CaptionTv extend Tv { St..

Programming/Java 2015.07.12

제어자(Modifier)

1. Introduction 제어자는 클래스, 변수 혹은 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 2. static static은 멤버변수, 메서드, 초기화 블럭에 사용될 수 있다. static이 의미하는 것은 아래와 같다. Member variables 모든 인스턴스에서 공통적으로 사용되는 클래스 변수가 된다.(전역 변수처럼) 클래스 변수는 인스턴스를 생성하지 않고 사용가능하다. 클래스가 메모리에 로드될 때 생성된다. Method 인스턴스를 생성하지 않아도 호출이 가능한 static 메서드를 생성할 때 사용 static 메서드 내에서는 일반적인 멤버 변수를 사용할 수 없다. 3. final final은 변경될 수 없는 의미를 가지고 있다. 변수에 사용되면 변경할 수 없는 상수(c나 c..

Programming/Java 2015.06.28

오버라이딩 (Overriding)

1. 오버라이딩이란? 부모 클래스로부터 상속 받은 메서드의 내용을 변경하는 것 class Point { int x; int y; String getLocation() { return "x :" + x + ", y :" + y; } } class Point3D extends Point { int z; Point3D(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } String getLocation() {// 오버라이딩 return "x :" + x + ", y :"+ y + ", z :" + z; } } 위의 코드와 같이 상속 받은 클래스의 메서드를 그대로 사용하지 않고 자신에 맞게 변경하는 것을 오버라이딩이라고 한다. 2. 오버라이딩의 조건 메서..

Programming/Java 2015.06.24

상속 (Inheritance)

상속의 정의 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것Why? 재사용성 코드 중복 제거 생산성 및 유지 보수 용이 자바의 상속 자바에서는 상속받고자 하는 클래스의 이름을 extends 키워드를 사용하여 상속을 수행한다. class Super {} class Sub extends Super {} 상속 관계를 그림으로 표현하면 아래의 Figure 1과 같다. Figure 1. 상속 관계도 단일 상속 (Single inheritance) 자바에서는 단일 상속만 허용한다. C++에서는 이와 다르게 다중 상속(Multiple inheritance)를 허용하지만 자바에서는 단일 상속만을 허용하는 이유는 다음과 같다. 클래스 간의 관계가 복잡해짐 서로 다른 두개의 클래스로부터 상속을 받은 멤버간의 이름이..

Programming/Java 2015.06.22
반응형