일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 디바이스 입출력
- DFS
- 운영체제
- springboot
- 백준 #
- 데드락
- java
- 코딩 테스트
- 다익스트라
- error
- integretion test
- 유니크 키
- BFS
- queue
- DP
- stack
- unionfind
- 파이썬
- OS
- OOP
- 논리 메모리
- SW Expert Academy
- 큐
- 자료구조
- 캡슐화
- Python
- 스택
- 프로세스
- 백준
- 객체지향 프로그래밍
- Today
- Total
목록java (10)
middlefitting
자바는 '한 번 작성하면, 어디서나 실행할 수 있다'는 핵심 철학 및 가치가 있습니다.좀 더 자세히 들어가면 '한 번 작성하면 어느 JVM(Java Virtual Marchine)에서든 돌아갈 수 있다'로 이어진다고 생각합니다. 즉 자바는 운영체제의 종속성을 가지지 않는다는 특징이 있는데, 이는 자바가 돌아가는 JVM이 그 종속성을 해결해주기 때문입니다. 운영체제 뿐만 아니라 어떤 환경이든 그곳에 맞는 JVM만 있다면 모든 자바 코드를 실행할 수 있는 것입니다. 여기서 말하는 JVM이 무엇인지, 세 가지 의미를 통해 알아보려고 합니다. JVM의 대표적인 세 가지 의미 JVM이란 단어는 대표적으로 세 가지가 의미로 사용됩니다.- Runtime instance- An implementation- A Spe..
최근 진행한 프로젝트에서 Socket.IO를 적용해야 할 일이 있었습니다. 처음에는 JavaScript로 탄생하였지만 Java, Python, Rust 등 다른 언어에서도 이를 지원하는 라이브러리들이 감사하게도 만들어습니다. 덕분에 Java 기반의 Spring 프로젝트에서도 사용할 수 있습니다. 관련된 한글 자료가 많지는 않은 것 같아서 SocketIOServer를 띄우는 것에 초점을 맞추어서 글을 작성해 보려고 합니다. 다른 언어로 적용이 필요하시다면 아래의 공식 문서를 참고하시길 바랍니다.https://socket.io/docs/v4/ Introduction | Socket.IOIf you are new to Socket.IO, we recommend checking out our tutorial.s..
스프링에서 테스트 코드를 작성하다 보면, 통합 테스트와 단위 테스트를 주로 작성하게 된다. 그런데 테스트 코드가 점점 많아지면서 관리에 어려움이 생긴다. 커버리지 측정에 있어 단위 테스트와 통합 테스트를 분리하고 싶은 경우도 생기고, 각각의 테스트를 분리해서 실행시키고 싶은 경우가 존재하는데 gradle에서 기본적으로 제공하는 Test 태스크는 모든 테스트를 한번에 실행시키기 때문에 파일의 구분이 어렵다. 근데 스프링과 JUnit에서는 당연히 해당 내용에 대한 해결책을 제시한다. 나와 비슷한 고민을 한 분들을 위해 gralde, JUnit, Spring에서 간단한 방법으로 단위 테스트와 통합 테스트를 구분하는 방법을 공유하고자 한다. 1) Tag 활용하기 @Tag 해결 방법은 아주 간단하다. JUnit..
테스트 코드가 중요하단 것은 개발을 공부하는 모두가 알고 있다. 그런데 생각보다 실천에 옮기기 어렵다. 실제로 학생으로써 개발을 공부하며 다양한 사이드 프로젝트에 참여해 왔지만, 테스팅 환경이 잘 구성된 경우는 없었다. 테스트 코드가 존재하더라도 이미 다 깨진 테스트 코드가 대부분이었고, 관리는 전혀 이루어지지 않았다. 테스트 코드는 잘 작성하지 않는 이유는 무엇일까. 이유는 다양하겠지만, 테스트 코드를 작성하는 시간이 아깝다고 느끼는 경우가 많은 것 같다. 기능 구현하기도 바빠서 테스트를 짤 시간이 없다는 생각이 대부분의 이유이다. 근데 기능 구현이 끝나도 테스트 코드를 잘 작성하지 않는다. 심지어 배포 이후에 버그가 펑펑 터지고 그걸로 고생하는 경우가 생겨도 테스트 코드를 작성하지 않는다. 이런 상황..
메서드 오버로딩이란 메서드 오버라이딩이란 상위 클래스에서 이미 정의된 메서드를 하위 클래스에서 다시 정의하는 것을 말합니다. 하위 클래스는 상위 클래스보다 많은 멤버를 가지게 되고, 이러한 특성은 자연스럽게 메서드 오버라이딩이 필요한 여러 상황을 만들게 됩니다. 메서드 오버라이딩을 통해 하위 클래스는 상위 클래스의 메서드를 재사용하면서 자신만의 새로운 기능을 추가할 수 있습니다. 메서드 오버라이딩의 목적 메서드 오버라이딩의 목적을 좀 더 자세히 살펴보면 다형성 구현, 유지보수성 향상, 확장성 확보가 존재합니다. 하나씩 살펴보면 다음과 같습니다. 다형성 구현 하위클래스는 상위 클래스의 메서드를 재정의함으로써 하위 클래스 동작 방식을 다양화할 수 있습니다. 유지보수성 향상 부모클래스의 메서드가 변경되는 것은..
상속이란 객체지향 프로그래밍에서 상속이란 기존의 클래스로 새로운 클래스를 작성하는 것을 말합니다. 즉 상속을 통해 두 클래스를 부모와 자식의 관계를 맺어줄 수 있습니다. 상속 규칙 상속에 있어서 다음과 같은 규칙들이 존재합니다. 1. 자손은 생성자와 초기화 블록을 제외한 조상의 모든 멤버를 상속받는다. 다음과 같은 코드를 통해 이해할 수 있습니다. public class Parent { String house = "Seoul"; } class Child extends Parent{ int age = 20; void print_variable() { System.out.println(house); System.out.println(age); } } class main_logic { public static..
this와 this()에 이어 super와 super()에 대해 알아보도록 하겠습니다. 이 둘도 완전히 다른 내용인데요, 결론부터 말하면 super는 조상의 멤버를 가리키며, 조상의 멤버를 자신의 멤버와 구분하기 위해 사용하고, super()는 조상의 생성자를 호출하는데 사용합니다. 참조변수 super public class Chair { String color; int weight = 20; } class ChairChild extends Chair{ int weight = 10; void info() { System.out.println(super.weight); System.out.println(weight); } public static void main(String[] args) { ChairC..
this() 와 this 의 차이 개인적으로 생성자 this()와 참조 변수 this는 상당히 낯선 친구들이었습니다. 둘의 차이는 완전히 다른 존재라는 것입니다. 비슷하게 생기긴 했지만 말이죠. 어떤 역할을 하는지 하나씩 알아보도록 하겠습니다. 생성자 this() this()는 생성자에서 호출하는 다른 생성자를 말합니다. 생성자에서 다른 생성자를 호출하는 경우는 무엇이 있을까요. 다양한 이유가 있겠지만 결국 코드의 중복을 줄이기 위해 사용할 것입니다. 생성자는 오버로딩이 가능한데 생성자마다 인스턴스 변수를 초기화하는 과정이 겹칠 수 있으니 그러한 부분을 줄일 수 있다는 것입니다. 예를 들어 다음과 같은 경우 활용할 수 있을 것입니다. public class Chair { String color; int ..
클래스에 존재하는 변수 자바 클래스에서 사용할 수 있는 변수의 종류에 대해 알아보도록 하겠습니다. Class에 존재하는 변수는 크게 4종류로 나누어 볼 수 있습니다. 그들은 인스턴스 변수, 클래스 변수, 지역 변수, 매개 변수입니다. 인스턴스 변수 (Instance Variables) 인스턴스 변수는 클래스 영역에 선언된 변수를 말합니다. 멤버 변수라고 표현하기도 합니다. 다음과 같이 정의를 할 수 있습니다. public class HelloInstance { int age; String name; } 이렇게 클래스 내부에 선언된 변수를 인스턴스 변수라고 합니다. 인스턴스 변수는 이름처럼 인스턴스가 생성되었을 때 생성이 되게 됩니다. 이러한 인스턴스 변수는 메서드에서 참조할 수 있고, 생성자에서도 사용할..
객체지향 프로그래밍(OOP)에서는 이름값 하듯이 객체가 아주 중요합니다. 객체와 클래스라는 개념은 같이 따라오게 되는데요 클래스는 설계도, 객체는 설계도대로 만든 구현체(물건)입니다. 객체(Object) 클래스를 알아보기 전에 객체가 무엇인지 알아보겠습니다. OOP에서 객체는 구현체, 실제로 존재하는 사물을 뜻하는데요, 속성(변수)과, 기능(메서드)를 가질 수 있습니다. 이것이 무슨 말일까요 객체는 속성을 가질 수 있다. 속성을 가진다는 것은 변수를 가질 수 있다는 것을 말합니다. 일단 변수로는 이러한 것들이 있겠습니다 Stringname; intage; 여기서 보시면 int는 Java의 기본 자료형입니다. 그리고String은 기본 자료형이 아니죠. class 자료형입니다. 즉 객체는 속성으로 기본 자료..