2020-11-24 오늘은 자바라는 언어의 가장 큰 특징 객체지향 중 Getter/Setter에 대하여 알아보도록 하겠다. 우선 해당 메서드를 사용하는 이유는 필드 값에 부적절한 값이 대입되는 것을 막기 위해서이다. (물론 각 객체들의 캡슐이 깨지지 않게 하기 위함도 있다.) 글로만 봐서는 이해가 어려울 수 있으니 바로 코드를 통한 예제를 보면서 이해해 보도록 하자. 예를 들어 한 명의 게임 캐릭터가 있다. 해당 캐릭터의 힘 / 민첩 / 지능을 스탯을 배분해야 하며, 스탯은 0부터 시작하기 때문에 - 값은 들어갈 수 없다고 가정해보자. 이러한 경우 실수로 - 값을 대입할 경우, 차후 캐릭터에 문제가 생겨 버그가 발생할 수 있다. 때문에 스텟(필드)은 private로 직접적인 접근을 할 수 없도록 막고, ..
2020-11-17 문제 농부 존은 소 베시와 소 데이지를 키우고 있습니다. 두 소는 자유롭게 1,000 × 1,000 2차원 격자 목초지를 누비며 놀고 있습니다. 농부 존이 종을 치면 베시와 데이지가 농부 존이 있는 곳으로 달려갑니다. 베시가 B에 있을 때 1초 후에 움직일 수 있는 칸과 데이지가 D에 있을 때 1초 후에 움직일 수 있는 칸을 나타낸 그림 베시는 1초 후에 꼭짓점을 공유하는 8개의 칸 중 하나로 이동할 수 있고 데이지는 1초 후에 변을 공유하는 4개의 칸 중 하나로 이동할 수 있습니다. 칸들은 충분히 넓어서 칸 하나에도 베시와 데이지 그리고 존이 같이 서 있을 수 있습니다. 베시와 데이지 두 소 모두 최단 경로로 존에게 갈 때 어떤 소가 더 빨리 도착할까요? 입력 첫 번째 줄에 베시의 ..
2020-11-22 접근 제한자의 종류는 4가지가 있다. public / protected / default / private이다. 이는 라이브러리 클래스 설계 시 외부(다른) 클래스에서 접근 가능/불가능 여부에 따라 필드, 생성자, 메서드를 설계하기 위해 사용된다. 오늘은 해당 내용에 대하여 알아보도록 하자. public : public 은 메인 클래스에서의 접근 제한자이며, 이름에서도 느껴지듯이 접근할 수 없는 클래스에 제한이 없고, public을 적용할 수 있는 대상으로는 클래스 , 필드 , 생성자, 메서드 모두 가능하다. protected : protected의 경우 상속이라는 개념과도 연관이 있는데, public와 달리 자식 클래스가 아닌 외부(다른) 패키지의 클래스는 접근을 할 수 없다. 또한..
2020-11-21 final 이름에서도 느껴지듯이 자바에서 final이 선언된 값은 프로그램 실행 도중 변경을 할 수 없다. 때문에 초기화 준 값에서 바뀌지 않는다는 것인데, 초기화 방법을 알아보자. public class tFinal { final String name = "홍길동"; //필드에서 초기화 하는 방법 final String bloodType; public tFinal(String bloodType) { this.bloodType = bloodType; } //생성자에서 초기화 하는 방법 } 위의 코드에서 볼 수 있듯이 final 을 초기화하는 방법은 필드와 생성자를 통해서만 초기화할 수 있다. 단순한 값이라면 필드에서 선언하는 것이 좋으며, 외부에서 입력받아야만 하는 값이라면, 생성자를..
2020-11-20 문제 창영마을에서 정인이의 반란은 실패로 끝났다. (3028번) 테러리스트로 변신한 정인이는 창영마을에 경고를 하려고 한다. 사실 정인이는 창영마을에서 제일 착한사람이다. 따라서, 사람들을 다치지 않게하려고 한다. 유튜브에서 폭발에 대한 동영상을 찾아보다가, 그는 나트륨을 물에 던지면 폭발한다는 사실을 알게 되었다. 정인이는 창영마을의 중심을 지나는 "강산강" 근처에 숨어있다가, 나트륨을 위의 동영상처럼 물에 던질 것이다. 현재 시간과 정인이가 나트륨을 던질 시간이 주어졌을 때, 정인이가 얼마나 숨어있어야 하는지 구하는 프로그램을 작성하시오. (정인이는 적어도 1초를 기다리며, 많아야 24시간을 기다린다.) 입력 첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, ..
2020-11-19 다수의 Overloading을 하다 보면 반복적인 this 코드를 사용하게 되는데, 이러한 불필요한 반복을 줄이는 방법을 알아보자. (예제는 전에 오버 로딩 글에서 사용하던 걸 사용하도록 하겠다.) 오버 로딩 글 링크 : seeminglyjs.tistory.com/167 public class Overloading { String name; String sex; int age; public Overloading() { } public Overloading(String name) { this.name = name; } //이름 매개변수를 받는 생성자 public Overloading(String name, String sex) { this.name = name; this.sex = se..