Programming

    [Java] 다형성(Polymorphism)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 다형성(Polymorphism)이란? 다형성에 대한 정의가 여러가지 글, 영상자료마다 다르고 다양해서 하나로 정의하기 어려웠다. 이에 필자가 찾은 모든 정의를 정리하고자 한다. (1) 하나의 타입에 실행결과가 각기 다른 여러 객체를 대입할 수 있는 것 (2) 하나의 객체가 여러가지 타입을 가질 수 있는 것 (3) 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것 세 정의는 미묘하게 다르지만, 공통된 부분이 있다. 바로 "하나"의 무엇이 "여러가지, 다양한" 것을 할 수 있고, 될 수 있음을 나타내고 있다. 이 공통된 부분에 초점을 두고 다형성을 정리해보자. [ 2 ] 메소드의 다형성 하나의 메소드가 다양한 ..

    [Java] 추상 클래스(abstract class)와 인터페이스(interface)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 추상 클래스(abstract class)란? abstract는 클래스나 메소드를 사용하려면 반드시 상속해서 사용하도록 강제하는 역할을 한다. 즉, abstract class 내부에 abstract method가 선언되어 있다면, 이를 상속받는 서브 클래스에서 abstract method를 완성하고 사용해야 한다. "서브 클래스에서 완성하고 사용해야 한다"라는 말이 와닿지 않을 수 있다. 아래의 코드를 보자. abstract class A { public abstract void a(); } class B extends A { public void a() { System.out.println("추상 클래스 A의 ..

    [Java] 패키지(Package)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 패키지란? 하나의 컴퓨터에는 같은 이름을 가진 2개의 파일이 공존할 수 없다. 즉, 내가 test.txt 파일을 작성해서 저장했다면, 그 내용이 다를지라도 또다른 test.txt 파일을 저장할 순 없는 것이다. 이러한 불편함을 해결해 준 것은 '폴더'였다. 우리는 카테고리를 설정하여 그에 상응하는 폴더를 생성하고, 그 폴더 내에는 비슷한 내용을 담은 수많은 파일들을 저장할 수 있게 되었다. 또한, 각자가 다른 폴더에 저장되어 있다면 같은 이름을 가진 파일도 공존할 수 있게 되었다. Java의 패키지도 폴더와 같은 역할을 한다. 비슷한 성격의 클래스들을 하나의 패키지에 모아 저장할 수 있는 것이다. 패키지를 활용..

    [Java] Overriding, Overloading

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] Overriding 상속이란 자식 클래스에서 부모 클래스의 필드와 메소드를 물려받아 사용할 수 있는 것을 의미한다. 그렇다면 자식 클래스는 부모 클래스의 메소드를 무조건 그대로 사용해야 할까? 부모 클래스 메소드의 동작 방법을 변경하고 싶을 때 우리는 Java의 Overriding 기능을 활용할 수 있다. class Parent { int left; int right; public Parent(int left, int right) { this.left = left; this.right = right; } public void sum() { System.out.println(this.left + this.righ..

    [Java] 생성자 및 상속에서의 생성자

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! C++, Java를 공부하며 생성자에 대해 깊게 고민한 적이 없었는데, 이번 포스팅을 계기로 심화된 학습을 해 보고자 한다. [ 1 ] 생성자란? 생성자는 인스턴스를 생성할 때 클래스 내부에서 가장 먼저 호출되는 특별한 메소드이다. 흔히 인스턴스를 생성할 때 new 연산자 바로 뒤에 오는 클래스 이름과 같은 메소드가 생성자이다. - class 객체변수 = new class(); 에서 class()가 생성자를 호출하는 것이다. 그렇다면 생성자는 어떻게 선언하는 것일까? 우선, 우리는 클래스를 선언할 때 명시적으로 생성자를 선언하지 않아도 해당 클래스를 문제 없이 사용할 수 있다. class A { int var1; int ..

    [Java] 클래스(class)의 구성과 클래스 멤버 및 인스턴스 멤버

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 클래스의 구성 클래스는 멤버(member)로 구성되는데, 멤버에는 필드(field), 메소드(method), 생성자(constructor)가 있다. 필드(field)라는 용어가 생소하여 더 공부해 보았는데, 필드는 결국 "클래스 전역에서 접근할 수 있는 변수"를 의미했다. - 필드의 역할 (1) 객체의 고유 데이터를 저장한다. (2) 객체가 가져야 할 부품을 저장한다. (3) 객체의 현재 상태를 저장한다. - 필드 특징 (1) 필드 선언을 위해서는 [접근 지정자] [필드의 타입] [필드의 이름] 3가지를 정해줘야 한다. (2) 생성자와 메소드 밖에서 선언되어야 한다. (생성자, 메소드 내에서 생성된 변수는 로컬..

    [Java] 제네릭(Generic)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 기본 개념 제네릭(Generic): 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. C++에 익숙한 사람이라면 template가 떠오를 것이다(단, 역할은 비슷하지만, 차이점도 많다!) class Student { public T info; } Student s1 = new Student(); Student s2 = new Student(); 위의 가 Generic이다. Student라는 class를 정의하는 시점에서는 info의 DataType을 명시적으로 지정하지 않고 있다가, s1이라는 Student의 인스턴스를 Student으로 만들어낼 때 info가 String이라는 DataType을..

    [C/C++] 백준 7576번

    문제출처: https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net [ 문제 ] 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익..