
시뮬레이션 문제입니다. 정육면체의 주사위가 있을때 굴려서 윗면에 쓰여 있는 수를 출력하는 문제입니다. 주사위의 각면의 초기값은 0이며, 주사위는 밖으로 나갈 수 없습니다. 바닥과 닿으면 바닥의 값을 닿은 면의 값에 복사하고 바닥의 값은 0이 됩니다. 바닥의 값이 0이면 주사위의 값을 바닥의 값에 복사합니다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Main { public stati..

에러와 예외 어떤 원인에 의해 오동작 하거나 비 정상적으로 종료되는 경우 삼각도에 따른 분류 - Error - 메모리 부족, stack overflow 같이 일단 발생하면 복구할 수 없는 상황 - 프로그램의 비 정상적 종료를 막을 수 없음 -> 디버깅 필요 - Exception - 읽으려는 파일이 없거나 네트워크 연결이 안 되는 등 수습될 수 있는 비교적 상태가 약한 것들 - 프로그램 코드에 의해 수습될 수 있는 상황 exception handling(예외 처리)란 - 예외 발생 시 프로그램의 비 정상 종료를 막고 정상적인 실행 상태를 유지 하는 것 - 예외의 감지 및 예외 발생 시 동작할 코드 작성 필요 예외 클래스의 계층 checked exception - 예외에 대한 대처 코드가 없으면 컴파일이 진..
추상 클래스 정의 자식 클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미한 메서드 메서드의 선언부만 남기고 구현부는 세미클론으로 대체 구현부가 없다는 의미로 abstract 키워드를 메서드 선언부에 추가 객체를 생성할 수 없는 클래스라는 의미로 클래스 선언부에 abstract를 추가 추상 클래스의 특징 abstract 클래스는 상속 전용의 클래스 - 클래스에 구현부가 없는 메서드가 있으므로 객체를 생성할 수 없음 - 하지만 상위 클래스 타입으로써 자식을 참조할 수는 있다. 조상클래스에서 상속받은 abstract 메서드를 재정의 하지 않은 경우 - 클래스 내부에 abstract 메서드가 있는 상황이므로 자식 클래스는 abstract 클래스로 선언되어야 함 추상 클래스를 사용하는 이유 abs..
다형성 polymorphism 하나의 객체가 많은 형(타입)을 가질 수 있는 성질 상속 관계에 있을 때 조상 클래스의 타입으로 자식 클래스 객체를 레퍼런스 할 수 있다. SpiderMan onlyOne = new SpiderMan("피터파커", false); SpiderMan sman = onlyOne; Person person = onlyOne; Object obj = onlyOne; * 객체는 모두 Object에 담을 수 있다 * 기본형은 각각의 클래스형태가 있다 Wrapper클래스라고 함 다형성의 활용 다른 타입의 객체를 다루는 배열 매개변수의 다형성 int a = 10; Integer aobj = a; // int ==> Integer : autoboxing int sum = a + aobj; /..
객체의 생성 제어와 싱글톤(Singleton) 디자인 패턴 객체의 생성을 제한해야 한다면? - 여러 개의 객체가 필요 없는 경우 - 객체를 구별할 필요가 없는 경우 = 수정 가능한 멤버 변수가 없고 기능만 있는 경우 - 이런 객체를 stateless한 객체라고 함 - 객체를 계속 생성/삭제 하는데 많은 비용이 들어서 재사용이 유리한 경우 Singleton 디자인 패턴 생성자가 여러번 호출되도, 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 것 (java에서는 생성자를 private으로 선언해 다른 곳에서 생성하지 못하도록 만들고, getInstance() 메소드를 통해 받아서 사용하도록 구현한다) - 외부에서 생성자에 접근 금지 -> 생성자의..
객체지향 언어의 특징 추상화(Abstraction) 현실의 객체를 추상화 해서 클래스를 구성 다형성(Polymorphism) 하나의 객체를 여러 가지 타입(형)으로 참조할 수 있음 상속(Inheritance) 부모 클래스의 자산을 물려받아 자식을 정의함으로 코드의 재사용이 가능 데이터 은닉과 보호(Encapsulation) 데이터를 외부에 직접 노출시키지 않고 메서드를 이용해서 보호할 수 있음 상속 기존 클래스의 자산 멤버을 자식 클래스에서 재사용하기 위한 것 - 부모의 생성자와 초기화 블록은 상속하지 않음 기존 클래스의 멤버를 물려 받기 때문에 코드의 절감 - 부모의 코드를 변경하면 모든 자식들에게도 적용 -> 유지 보수성 향상 상속의 적용 - extend 키워드 사용 Object 클래스 모든 클래스의..
객체 지향 프로그래밍이란? (Object Oriented Programming) 객체란? 주체가 아닌 것, 주체가 활용하는 것 객체지향 프로그래밍 주변의 많은 것들을 객체화 해서 프로그래밍 하는 것 장점 블록 형태의 모듈화된 프로그래밍 신뢰성 높은 프로그래밍이 가능 추가/수정/삭제가 용이 재사용성이 높다 현실의 객체가 갖는 속성과 기능은 추상화 되어 클래스에 정의된다. 클래스는 구체화 되어 프로그램의 객체가 된다. 프로그래밍을 통해서 추상화를 함 => 클래스를 작성함 (클래스는 멤버변수와 멤버메서드로 이루어짐) => 클래스를 찍어내는 과정을 객체화 => 찍어낸 객체에 값을 넣어주는 과정을 구체화 클래스 객체를 정의해 놓은 것 즉 객체의 설계도, 틀 클래스는 직접 사용할 수 없고, 직접 사용되는 객체를 만..

각 위치에 높이가 주어지고 가로 세로로 이동 가능한 경우의 수를 구하는 문제입니다. 높이가 같은 곳끼리 이동할 수 있으며 길이 l의 경사로를 설치할 수 있습니다. 경사로를 쌓기위해서는 높이 차이가 1이 나야하고 경사로를 쌓기 위한 l만큼의 공간이 필요합니다. 경사로를 설치해서 해당 길을 이동할 수 있는지 찾고 가능한경우를 카운팅해서 출력해주었습니다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public c..