분류 전체보기(324)
-
[Data Structure] 스택 (Stack)
스택이란? "LIFO 구조" : Last-In First-Out 프링글스 과자라고 생각하면 된다 프링글스는 제조 과정에서 과자들을 차례대로 통에 넣어준다 당연히 프링글스를 사먹는 사람들은 일반적으로 제조과정에서 마지막에 넣은 과자를 먼저 먹게된다 이처럼 스택은 몇몇 요소들을 넣으면 가장 나중에 넣은 요소들부터 차레대로 pop이 되는 구조이다 스택 ADT (추상 자료형) - n개의 element형의 요소들의 선형 리스트 boolean is_full(stack *s) 스택 포화 상태 검출 함수 boolean is_empty(stack *s) 스택 공백 상태 검출 함수 void push(stack *s, element item) 스택 s에 item을 삽입 element pop(stack *s) 스택 s의 가장..
2021.11.30 -
[Data Structure] 하노이탑 (Recursion)
하노이 탑 (The Tower of Hanoi) - 원판은 1번에 1개씩만 옮겨야 한다 - 맨 위에 있는 원판만 이동 가능 - 작은 원판 위에 큰 원판을 올려 놓을 수 없다 n개가 존재하고 막대가 3개 (A, B, C)일 경우 n-1개의 원판을 B로 옮기고 맨 밑에 1개의 원판을 C로 옮기고 B에 있는 n-1개의 원판을 C로 옮기면 된다 ※ 코드 구현 #include void hanoi(int n, char from, char tmp, char to) { /* n = 원판의 개수 from = 시작 지점 tmp = 경유 지점 to = 도착 지점 */ /* 1. n-1개의 원판을 경유 지점에 잠시 놓는다 (여기서의 경유 지점 = to) 2. 맨밑에 있는 1개의 원판을 최종 도착지점에 옮긴다 (여기서의 경유 ..
2021.11.30 -
[명품 Java] 5장 연습문제 (상속)
[5장 1번] 다음 클래스에 대해 물음에 답하라. class A { private int a; public void set(int a) { this.a = a; } } class B extends A { protected int b, c; } class C extends B { public int d, e; } 1. A objA = new objA(); 에 의해 생성되는 객체 objA의 멤버들을 모두 나열하라. - private int a; - public void set(int a) {this.a = a;} 2. B objB = new objB(): 에 의해 생성되는 객체 objB의 멤버들을 모두 나열하라. - private int a; - public void set(int a) {this.a = a..
2021.11.27 -
[Java] 추상 클래스 / 인터페이스
추상 클래스 (abstract) - 선언은 되어 있으나, 코드가 구현되어 있지 않은 메소드 - 추상 메소드를 가지고 있으면, 반드시 추상 클래스로 선언 - 객체를 생성할 수 없다 - 레퍼런스 변수는 선언 가능하다 ※ Example abstract class Calculator{ public abstract int add(int a, int b); public abstract int subtract(int a, int b); public abstract double average(int[] a); } class Cal extends Calculator{ // 추상 메소드 구현 @Override public int add(int a, int b) { return a+b; } @Override public i..
2021.11.24 -
[Java] 메소드 오버라이딩
메소드 오버라이딩 (Method Overriding) - 슈퍼 클래스에 선언된 메소드와 같은 이름/리턴 타입/매개 변수 리스트를 갖는 메소드를 서브 클래스에서 재작성 - 슈퍼 클래스의 메소드를 '무시하기/덮어쓰기' - 슈퍼 클래스 메소드의 접근 지정자보다 무조건 접근 범위가 같거나 넓어야 한다 - static/private/final로 선언된 메소드는 오버라이딩 X ※ 동적 바인딩 - 실행할 메소드를 컴파일 시(Compile time)에 결정하지 않고, 실행 시(Run time)에 결정 - 슈퍼 클래스의 메소드를 무시하고, 서브 클래스에서 오버라이딩한 메소드가 무조건 실행 ※ Example class Shape{ public void draw(){ System.out.println("Shape"); } ..
2021.11.24 -
[Java] 업캐스팅 / 다운캐스팅
업캐스팅 (Upcasting) - 서브 클래스의 객체에 대한 레퍼런스 -> 슈퍼 클래스 타입으로 변환 - 슈퍼 클래스의 레퍼런스로 서브 클래스의 객체를 가리키게 한다 - But 슈퍼 클래스의 레퍼런스는 슈퍼 클래스의 멤버만 접근 가능 - 명시적 타입 변환을 하지 않아도 된다 ※ Example class Person{ String name, id; public Person(String name){ this.name = name; } } class Student extends Person{ String grade, department; public Student(String name) { super(name); } } public class test { public static void main(String..
2021.11.24 -
[Java] 상속
상속 (Inheritance) - 클래스 사이의 상속 - 코드 중복을 제거하여 클래스를 간결하게 구현 - 부모 클래스 = 슈퍼 클래스(Super Class) / 상속받는 자식 클래스 = 서브 클래스(Sub Class) ※ 서브 클래스 - 슈퍼 클래스의 private 멤버를 제외한 모든 멤버에 접근 가능 ※ Example class Point{ private int x, y; public void set(int x, int y){ // private로 선언된 x, y에 접근을 위한 메소드 this.x = x; this.y = y; } public void showPoint(){ System.out.println("(" + x + "," + y + ")"); } } class ColorPoint extend..
2021.11.24 -
[명품 Java] 4장 실습문제 (클래스와 객체)
[4장 1번] 자바 클래스를 작성하는 연습을 해보자. 다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라. public static void main(String[] args) { TV myTV = new TV("LG", 2017, 32); //LG에서 만든 2017년 32인치 myTV.show(); } LG에서 만든 2017년형 32인치 TV ≫ 풀이 package Java4; class TV{ private int year, inch; private String brand; public TV(String brand, int year, int inch){ this.brand = brand; this.year = year; this.inch = inch; } publi..
2021.11.22 -
[명품 Java] 4장 연습문제 (클래스와 객체)
[4장 1번] 자바의 클래스와 객체에 대한 설명 중 틀린 것은? 1. 클래스 바깥에 전역 변수는 선언할 수 없다. 2. 클래스는 객체를 생성하기 위한 틀이다. 3. 클래스의 멤버 변수를 필드라고 부르며, 클래스는 필드와 메소드로 이루어진다.. 4. 필드는 클래스 내에서 private 보다 public으로 선언하는 것이 바람직하다. - 4번. 필드는 클래스 내에서 public 보다 private로 선언하는 것이 바람직하다 [4장 2번] 생성자에 대한 설명 중 틀린 것은? 1. 생성자가 작성되어 있지 않으면, 컴파일러가 자동으로 기본 생성자를 추가해준다. 2. 생성자의 이름은 클래스의 이름과 반드시 같아야 한다. 3. this()는 생성자 내에서 다른 생성자를 호출하는 코드이다. 4. 생성자에서는 아무 값도..
2021.11.22 -
[명품 Java] Open Challenge-4 (끝말잇기 게임)
n명이 참가하는 끝말잇기 게임을 만들어보자. 처음 단어는 “아버지”이다. n명의 참가자들은 순서대로 자신의 단어를 입력하면 된다. 끝말잇기에서 끝말이 틀린 경우 게임을 끝내고 게임에서 진 참가자를 화면에 출력한다. 프로그램에서는 시간 지연을 구현하지 않아도 된다. 그렇지만 참가자들이 스스로 시간을 제어보는 것도 좋겠다. 이 문제의 핵심은 여러 개의 객체와 배열 사용을 연습하기 위한 것으로, main()을 포함하는 WordGameApp 클래스와 각 선수를 나타내는 Player 클래스를 작성하고, 실행 중에는 WordGameApp 객체 하나와 선수 숫자만큼의 Player 객체를 생성하는데 있다. 문제에 충실하게 프로그램을 작성하여야 실력이 늘게 됨을 알기 바란다. 끝말잇기 게임을 시작합니다... 게임에 참가..
2021.11.22 -
[Java] final 키워드
final 클래스 - 클래스를 상속받을 수 없음을 지정 final class FinalClass{ ..... } class SubClass extends FinalClass{ // 오류 : final class 인 FinalClass는 상속 X ..... } final 메소드 - 오버라이딩 할 수 없는 메소드 public class SuperClass{ protected final int finalMethod(){....} // finalMethod()는 자식이 오버라이딩 불가 } class SubClass extends SuperClass{ // SubClass가 SuperClass 상속 protected int finalMethod(){....} // 오류 : finalMethod()는 오버라이딩 X..
2021.11.19 -
[Java] static
※ Example (눈, 공기) 눈 - 사람마다 각자의 차이가 존재 - non-static 멤버 공기 - 모든 사람이 공유 - 오직 1개만 존재 - static 멤버 class StaticSample{ int n; // non-static 필드 void g(){...} // non-static 메소드 static int m; // static 필드 static void f(){...} // static 메소드 static 멤버 - 객체를 생성하지 않고도 사용 가능 - 클래스당 하나만 생성되는 멤버 (클래스 멤버) -> 동일한 클래스의 모든 객체들이 공유 - main() 메소드가 실행되기 전에 이미 생성 - static 멤버의 생성 시점 ≒ JVM 시작 시점 non-static 멤버 - 객체가 생길 때 객..
2021.11.19