본문 바로가기

프로그래밍

자바의 스택(stack) 스택은 프로그램에서 가장 많이 쓰이는 자료구조입니다. 우리가 일반적으로 프로그래밍할때는 많이 쓰이지 않을 수도 있지만 실제로 컴퓨터에서는 굉장히 많이 사용하고 있습니다. 우리가 메소드를 호출할 때 메소드에서 다른 메소드를 호출할 수도 있습니다. 메소드는 실행을 마치고 돌아갈 곳을 기억해야합니다. 그럴때 마지막에 있는 호출한 메소드의 주소부터 반환해주어야 합니다. 그러기 위해서는 가장 마지막에 들어간 값이 가장 먼저 나와야합니다. 이것은 스택의 기본 성질입니다. 우리가 편의점에서 물건을 스택한다고 말을 합니다. 편의점 음료수 냉장고를 살펴보도록 하겠습니다. 음료수를 밀어넣는 구조로 되어있습니다. 그래서 차례로 음료수를 넣으면 꺼낼때에는 가장 마지막에 넣은 음료수가 가정 먼저 나오게 되어있습니다. 스택은 가.. 더보기
자바의 Linked list 프로그램에서 데이터를 사용할 때 기본타입을 주로 사용합니다. 하나씩 변수를 사용하기도 하지만 같은 타입의 변수가 여러개 필요한 경우에는 배열을 사용합니다. 배열은 매우 유용한 자료구조입니다. 여러개의 변수를 하나의 이름으로 사용할 수 있고 인덱스를 이용해서 값을 바로 접근할 수 있습니다. 하지만 이 배열에는 치명적인 단점이 몇가지 존재합니다.1. 한번 선언하면 크기를 바꿀 수 없습니다.2. 값을 삽입하거나 삭제하기 힘듭니다. 값을 삽입하려면 일단 크기가 가능한가를 확인해야하고 삽입할 자리이후의 모든 값을 뒤로 옮겨야합니다. 삭제의 경우는 값을 삭제하고 뒤에 있는 모든 값을 앞으로 옮겨야합니다. 크기가 작다면 별 상관이 없겠지만 크기가 크다면 굉장히 비효율적이 될 것이고 삽입과 삭제가 자주 일어난다면 굉장.. 더보기
자바프로그램 예제 - 페니를 없애는 프로그램 오늘도 개념적인 내용이 아닌 예제프로그램을 작성해보도록 하겠습니다.. 이후로는 꼭 필요한 경우가 아니면 개념이나 이론적인 것 보다는 예제를 통해 내용을 알아보는 방식으로 공부하겠습니다. 제가 자바스터디를 하고 있는데 이론적인 내용이 계속되니까 힘들어하더군요. 그래서 예제를 중심으로 하나씩 프로그램을 작성하는 방식으로 했더니 뭔가 만들어낸다는 희열감과 성취감을 느끼더군요. 그래서 알맞은 프로그램 예제를 연구하고 작성해서 이론을 설명해보도록 하겠습니다. 오늘은 그냥 단순한 프로그램 예제입니다. 제가 예전에 캐나다에 있을 때 마트에서 페니를 없애는 작업을 했습니다. 처음에는 프로그램으로 적용되지 않아서 그냥 캐쉬어들이 생각을 해서 했습니다. 끝이 1이나 2로 끝나면 0으로 하고 3이나 4로 끝나면 5로 만듭니.. 더보기
재귀호출 - 알고리즘 오늘은 재귀호출에 대해 알아보도록 하겠습니다. 알고리즘에서 배우는 내용이기는 한데 그렇게 많이 쓰이지는 않습니다. 하지만 재귀호출이 아니면 프로그래밍이 너무 어려워지는 경우들이 있습니다. 재귀호출은 중요한 개념이고 이것을 배움으로써 프로그램에서 함수(자바에서는 메소드)가 어떻게 호출되는지 어떻게 사용되는지 알 수 있습니다. 우선 기본적으로 재귀호출(recursion)은 자기가 자신을 부르는 것이고 반드시 조건문에 의해 종료가 되어야 합니다. 우선 팩토리얼에 대해 알아보겠습니다. 수학에서 n! = n * (n - 1) * (n - 2) * ... * 1입니다. 이것은 다시 n! = n * (n - 1)!로 정의할 수 있습니다. 이것처럼 n!을 (n - 1)!을 이용해서 값을 구할 수 있다면 !를 함수로 생.. 더보기
자바 프로그램 예제 - 로또 프로그램 지금까지 많은 개념과 문법을 배웠습니다. 아직 다 배우지는 못했지만 너무 이론적인 얘기를 많이 했으니까 오늘은 실질적인 문제를 푸는 법에 대해 얘기를 해보겠습니다. 지금 작성하려는 프로그램은 로또 프로그램입니다. 로또를 살때 자동으로 달라고 하면 기계가 자동으로 로또 숫자를 작성해서 줍니다. 요즘에 보면 로또 숫자를 뽑아내는 사이트들이 있습니다. 이런 사이트들은 자기들이 특별한 공식을 사용해서 확률이 높다고 말합니다. 하지만 많은 회원들이 있고 오랫동안 많은 숫자를 제공하다보면 당첨이 되는 경우도 있을 것이고 그걸로 자기들 사이트를 홍보할 수가 있을 것입니다. 이런 사이트들이 어떤 알고리즘을 사용하는지 제가 알지는 못하지만 저도 이런 사이트들을 이용해봤지만 소득은 없었습니다. 그래서 간단히 만들 수 있는.. 더보기
자바의 상속 여지껏 자바의 기본 문법과 클래스에 대해 배웠습니다. 이제부터는 클래스의 속성에 대해 알아보겠습니다. 클래스는 객체지향언어에서 가장 기본적인 형태이고 이 클래스는 상속, 다형성, 캡슐화 등의 속성이 있습니다. 객체 지향프로그래밍에서 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있습니다. 프로그램에서는 부모 클래스를 상위 클래스라고 부르고, 자식 클래스를 하위 클래스 또는 파생 클래스라고 부릅니다. 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여줍니다. 상속을 이용하면 부모 클래스에서 가지는 모든 멤버를 가져올 수 있고 부모 클래스의 수정으로 모든 자식 클래스들도 수정되는 효과를 가져오기 때문에 유지 보수 시간을 최소화할 수도 있습니다. 클래스 상속 현실에.. 더보기
자바 패키지와 접근제한자 프로젝트를 개발하다 보면 적게는 수십 개, 많게는 수백 개의 클래스를 작성해야 합니다. 클래스를 체계적으로 관리하지 않으면 클래스 간의 관계가 뒤엉켜서 복잡하고 난해한 프로그램이 되어 결국 유지 보수가 어렵습니다. 자바에서는 클래스를 체계적으로 관리하기 위해 패키지(package)를 사용합니다. 이는 화일들을 하나의 폴더가 아닌 여러개의 폴더로 나누어 관리하는 것과 비슷합니다. 패키지의 물리적인 형태는 파일 시스템의 폴더입니다. 패키지는 단순히 파일 시스템의 폴더 기능만 하는 것이 아니라 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할을 합니다. 클래스 이름이 동일하여도 패키지가 다르면 다른 클래스로 인식합니다. 단순히 클래스 이름이 아닌 패키지 이름 + 클래스 이름으로 인식합니다. 패키지.. 더보기
자바 프로그램의 가독성과 효율성 오늘은 기본적인 프로그램의 예제에 대해 살펴보고 효율성과 가독성에 대해 얘기해보겠습니다. 요즘 컴퓨터가 많이 좋아져서 메모리도 커지고 CPU도 빨라 졌습니다. 제가 처음에 프로그램을 할 때는 효율성이 가장 중요한 덕목이었습니다. 지금은 가독성이 더 중요하다는 얘기를 많이 합니다. 그래야만 유지보수도 편하고 대형 프로젝트에서 다른 사람들과 협업할 때도 도움이 됩니다. 물론 자바가 효율성을 앞세운 프로그래밍 언어는 아니지만 그렇다고해서 아주 느린 프로그래밍 언어도 아닙니다. 주로 대형 프로젝트나 인터넷, 모바일 프로그래밍에 적합한 언어이기는 합니다. 하지만 자바가 어느기기에도 들어가도록 프로그래밍을 할 수도 있고 효율적인 프로그래밍이 필요한 경우도 있습니다. 물론 아주 효율적인 프로그래밍을 하려면 C를 이용.. 더보기