Blog blog = new Korea()

분류 전체보기 119

[Java] Covariant(공변성)에 관한 간단한 이야기

📝 객체지향 5원칙(SOLID) SOLID는 객체지향 5원칙의 두음을 따서 만든 말이다. 각각 나열하자면, SRP(단일 책임 원칙) OCP(개방 폐쇄 원칙) LSP(리스코프 치환 원칙) ISP(인터페이스 분리 원칙) DIP(의존관계 역전 원칙) 위와 같이 존재한다. 이 중 오늘 이야기할 Covariant(이하 공변성)에 관한 이야기가 속한 곳은 LSP(Liskov Substitution Principle)다. 📌 LSP란? LSP는 타입 S가 타입 T의 서브타입이라면 프로그램의 속성 변경 없이 T타입의 객체를 S타입으로 치환할 수 있어야 한다.라는 개념이다. 쉽게 말하면, 서브타입은 수퍼타입을 대체할 수 있어야 한다는 말이다. 서브타입이 수퍼타입을 대체하는 개념, 그것이 바로 공변성이다. 공변성을 이용한..

Java 2022.09.02

[Java] System 클래스

🤗 자바는 클래스의 집합! 자바를 사용하면 흔히 클래스라는 것을 만든다. 클래스는 무엇인가를 설명하기엔 너무나 깊은 이야기일 것 같아서.. 따로 알아보고 참고하면 좋겠다. 근데 자바에 있는 메서드는 어디서 오느냐.. 모두 자바 속에 있는 패키지의 클래스에서 온다. 💻 System 클래스 System 클래스는 말 그대로 system 환경과 직접적인 관계가 있는 클래스이다. System에는 3가지 중요한 클래스 변수가 있는데, in, out, err이다. in은 표준 입력에 사용되고, out은 표준 출력에 사용되며, err은 에러를 출력하는 데에 사용되는 변수다. 그리고 print, println, printf 및 arraycopy 등 다양한 메서드를 통해 입력, 출력, 에러와 관련된 동작들을 처리하게 된다..

Java 2022.08.30

[Java] main 메서드

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } 😥 main 메서드가 뭔가요? 위에 간단한 출력문을 하나 작성해봤다. 뭐.. 들여쓰기가 마음에 들지 않을 수 있지만.. 양해해주기를 바란다. (분명히 내 코드 블럭에서는 정확히 들여썼다..ㅠㅠ) 여튼 본론으로 넘어가서, main 메서드는 자바에서 핵심 메서드라고 생각하면 된다. 프로그램이 시작되는 곳이자, 종료되는 곳. 그게 main 메서드의 의미다. 그래서 main 메서드는 String 타입의 배열인 args를 인자로 받아야 하고, static을 선언해주어야 한다는 조건들이 있다. 간단히 생각하면 시작 버튼이라고 ..

Java 2022.08.13

[백준] 2941 크로아티아 알파벳 (Java)

자바의 String 자체 메서드를 이용하면 꽤나 쉽게 풀 수 있다. import java.util.Scanner; public class 백준_2941_크로아티아알파벳 { public static void main(String[] args) { // 백준 2941 _ 크로아티아 알파벳 // 입력변수 Scanner sc = new Scanner(System.in); String input = sc.nextLine(); // 크로아티아 알파벳 배열 String[] crozhe = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; // 단, 위 배열에서 "z="가 "dz="보다 먼저 나오면 오류가 발생할 수 있으니 유의하자 for (String s: crozhe) { ..

알고리즘 2022.08.10

[백준] 1712 손익분기점 (Java)

꽤나 쉬운 문제다. 문제를 보면 알다시피 순이익을 구하고, 순이익이 고정비용을 넘겼을 때 손익분기점이 온 것이라 판단하면 된다. 그리고 손익분기점이 오기 까지의 물건 판매 수를 구하면 되는 문제이다. 처음에는 물건을 계속 팔아서 손익분기점을 넘긴다는 방식으로 생각해서 반복문인 while을 사용했었다. import java.util.Scanner; public class Main { public static void main(String[] args) { // 백준 1712 _ 손익분기점 // 입력변수 Scanner sc = new Scanner(System.in); int A = sc.nextInt(); // 고정 비용 int B = sc.nextInt(); // 가변 비용 int C = sc.nextI..

알고리즘 2022.08.09

[디자인패턴] 팩토리 메서드

🤔 팩토리 메서드라니? 디자인 패턴 중 하나인 팩토리 메서드. 그런데 메서드라는 단어가 눈에 띈다. 자바나 C#에서 구현하는 그 method와 같으면서 다른 의미를 가지고 있다. (그렇다고 해서 자바와 C#에서만 쓰는 것이 아니다. 객체지향 설계를 하는 모든 설계에서 구현할 수 있다.) Factory Method라고 하면 단순히 자바나 C#에서 객체를 생성하는 method (즉, 생성자)와 착각하기 쉬운데, 그것과는 다른 의미를 가지고 있다. (물론 method라는 단어의 절대적인 의미는 같다..) 생성자는 단순히 현재 클래스에 해당하는 객체를 생성하는 특수 메서드이지만, 팩토리 메서드는 어떠한 객체를 생성함에 있어서 확장의 가능성을 열어둔 패턴이라고 생각하면 된다. 궁극적으로 객체를 생성한다는 점에서는..

디자인 패턴 2022.08.03

[디자인패턴] 싱글톤 패턴

🙄디자인 패턴이 뭐야? 디자인 패턴이 무엇인지 자세히 다루는 것은 나중으로 하고, 지금은 간단하게 정의 정도만 설명하겠다. 디자인 패턴이란 소프트웨어 설계에서 공통적으로 발생하는 문제에 대해서 재사용이 가능하도록 설계해둔 해결책이다. 쉽게 말해 여러분이 PPT를 만든다고 가정한다면, PPT를 쉽게 만들기 위해 미리 만들어진 템플릿을 찾을 것이다. 그리고 디자인 패턴은 그 템플릿과 비슷하다고 생각하면 된다. 🤔오호! 그럼 싱글톤 패턴은 뭔데? 결론부터 말하면 객체를 단일화시키는 패턴이다. 이제 좀 예를 들어 말하자면, 여러분들은 각자 은행 계좌를 가지고 있을 것이다. (물론 없는 사람도 있겠지만 그런 사람은 있다고 가정해보자.) 여러분이 계좌에 입금을 하거나 다른 사람에게 송금을 한다면, 그때마다 나의 계..

디자인 패턴 2022.08.01

[백준] 2525 오븐시계 (Python)

자바 버전을 파이썬으로 컨버팅했다. 2022.07.29 - [알고리즘] - [백준] 2525 오븐시계 (Java) [백준] 2525 오븐시계 (Java) 어제 포스팅한 알람시계와 거의 동일한 문제다. 푸는 방식은 똑같다. 2022.07.27 - [알고리즘] - [백준] 2884 알람시계 (Java) [백준] 2884 알람시계 (Java) 알고리즘 입문으로 상당히 괜찮은 문제다. 아마 codari.tistory.com # 백준 2525 오븐 시계 h, m = map(int, input().split(" ")) c = int(input()) nH = h nM = m + c if(nM >= 60): nH += 1 if(nH >= 24): nH = 0 print(nH, nM)

알고리즘 2022.07.29

[백준] 2525 오븐시계 (Java)

어제 포스팅한 알람시계와 거의 동일한 문제다. 푸는 방식은 똑같다. 2022.07.27 - [알고리즘] - [백준] 2884 알람시계 (Java) [백준] 2884 알람시계 (Java) 알고리즘 입문으로 상당히 괜찮은 문제다. 아마 프로그래밍을 이제 막 시작한 사람들은 한 번 쯤 거쳐가는 문제이지 않을까..? import java.io.BufferedReader; import java.io.IOException; import java.io.Inpu.. codari.tistory.com import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public clas..

알고리즘 2022.07.29