본문 바로가기
SMALL

프로그래밍언어52

이진탐색트리 검사 알고리즘 INT_MAX = 4294967296 INT_MIN = -4294967296 # 이진 트리 노드 class Node: # 새로운 노드를 만듦 def __init__(self, data): self.data = data self.left = None self.right = None # 주어진 트리가 이진 트리이면 True 반환 def isBST(node): return isBSTUtil(node, INT_MIN, INT_MAX) # 주어진 트리가 이진 탐색 트리이고 해당 값인 경우 True 반환 # >= min and maxi: return False # 위의 경우에 해당되지 않는다면 트리를 반복적으로 확인 return (isBSTUtil(node.left, mini, node.data - 1) and i.. 2021. 5. 21.
08-1 인터페이스 자바에서의 인터페이스(interface) = 객체의 사용방법을 정의한 타입(개발 코드와 객체가 서로 통신하는 접점 역할) → 인터페이스를 통해 다양한 객체를 동일한 사용 방법으로 이용할 수 있음 그렇다면 왜 개발 코드가 직접 객체의 메소드를 호출하지 않고 중간에 인터페이스를 두는 걸까? → 개발 코드를 수정하지않고 사용하는 객체를 변경할 수 있도록 하기 위해서! 따라서, 개발 코드 측면에서는 코드 변경없이 실행 내용과 리턴 값을 다양화할 수 있다는 장점을 가진다. 인터페이스는 '~.java' 형태의 소스 파일로 작성되고 컴파일러를 통해 '~.class' 형태로 컴파일되기 때문에 물리적 형태는 클래스와 동일하다. 그러나 소스를 작성할 때 선언하는 방법이 class 대신에 interface를 사용한다는 것이.. 2021. 5. 18.
07-3 추상 클래스 먼저, 추상(abstract)라는 단어의 사전적 의미는 실체 간에 공통되는 특성을 추출한 것을 말한다. 예를 들어서, 붕어, 잉어, 배스, 연어, 가자미, 고등어 등은 물고기라는 공통점이 있다. 여기서 물고기는 구체적인 실체라기보다는 실체들의 공통되는 특성을 가지고 있는 추상적인 것이라고 볼 수 있다. 이런 개념을 도입한 것이 추상 클래스이다. 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있으며, 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성(필드, 메소드)을 물려받고, 추가적인 특성을 가질 수 있다. 그렇다면 추상.. 2021. 4. 28.
07-2 타입 변환과 다형성 다형성이란 동일하지만 다양한 객체를 이용해서 다양한 실행 결과가 나오도록 하는 성질을 나타낸다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 사용(장착)하느냐에 따라 주행 성능이 달라질 수 있음을 말할 수 있다. 다형성을 구현하려면 메소드 재정의와 타입 변환이 필요하다. 타입 변환이란 타입을 다른 타입으로 변환하는 행위를 말한다. 기본 타입의 변환은 이미 앞에서 다뤘는데, 클래스도 마찬가지로 타입 변환을 할 수 있다. 클래스의 변환은 상속 관계에 있는 클래스 사이에서 발생하며, 자식은 부모 타입으로 자동 타입 변환이 가능하다. 자동타입변환(promotion)은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다. 자동 타입 변환의 조건은 다음과 같다. 자동 타입 변.. 2021. 3. 9.
07-1 상속 상속(inheritance)은 부모 클래스의 멤버를 자식 클래스에게 물려주는 것을 말한다. 프로그램에서는 부모 클래스를 상위 클래스라고 부르고, 자식 클래스를 하위 클래스 또는 파생 클래스라고 한다. 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다. 현실에서 상속은 부모가 자식을 선택해서 물려주지만, 프로그램에서는 자식이 부모를 선택한다. 자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends뒤에 기술한다. class 자식클래스 extends 부모클래스 { //필드 //생성자 //메소드 } 예를 들어, Car클래스를 상속해서 SportsCar클래스를 설계하려면 다음과 같이 작성한다. class Sport.. 2021. 2. 25.
06-6 패키지와 접근 제한자 프로젝트를 개발하다 보면 적게는 수십 개, 많게는 수백 개의 클래스를 작성해야 한다. 이 대 클래스를 체계적으로 관리하지않으면 클래스 간의 관계가 뒤엉켜서 복잡하고 난해한 프로그램이 되어 결국 유지 보수가 어려워 진다. 때문에 자바에서는 패키지(package)를 사용하여 클래스를 체계적으로 관리한다. 패키지의 물리적인 형태는 파일 시스템의 폴더이지만, 폴더 기능만 하는 것이 아니라 클래스의 일부분으로 클래스를 유일하게 만들어주는 식별자 역할을 한다. 즉, 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식한다. 클래스의 전체 이름은 '패키지 이름+클래스 이름'인데 패키지가 상, 하위로 구분되어 있다면 도트(.)를 사용하여 '상위패키지.하위패키지.클래스'로 표현한다. 예를 들어, 다음과 같은 패.. 2021. 2. 23.
LIST