![[JAVA] 라이브러리 생성 및 불러오기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlVkNr%2FbtsnD1pBEL9%2FBKc7SECd3TpvF8qq8ZzMj0%2Fimg.jpg)
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 라이브러리는 프로그램 개발 시 활용할 수 있는 클래스와 인터페이스들을 모아 놓은 것을 말한다. 일반적으로 JAR(Java ARchive) 압축파일 형태로 존재한다. JAR 파일에는 클래스와 인터페이스의 바이트 코드 파일(~.class)들이 압축되어 있다. 라이브러리를 사용하면 개발 시간이 단축되고 유지보수가 용이하다. 나만의 라이브러리 생성하기 1. 새 프로젝트 생성 주의할 점은 Create module-info,java file에 체크를 하지 않는 것이다. 프로젝트 이름은 my_lib로 하였고, 패키지 pack1과 pack2를 생성하고 각 패키지에 A와 B 클래스를 선언했다. 2. ..
![[JAVA] 중첩 인터페이스 (nested interface)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5r2nw%2FbtsnvqwhpEH%2FdfXgSF2MbBE6IGplSLk9k1%2Fimg.jpg)
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 중첩 인터페이스 중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 뜻한다. 인터페이스를 클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계이기 때문이다. 즉, 인터페이스 외부의 클래스가 존재하지 않는다면 해당 인터페이스는 쓸모가 없기 때문이다. 중첩 인터페이스는 아래와 같이 선언된다. class A{ [public | private] | [static] interface B{ //상수 필드 //추상 메소드 //디폴트 메소드 //정적 메소드 } } 외부의 접근을 막지 않으려면 public A 클래스 내부에서만 사용하려면 private 접근 제한자를 붙이지 않으면 같은 패키지 안..

test.c #include int main(){ printf("Hello, World!"); } test.cpp #include using namespace std; int main() { cout
![[JAVA] 봉인된 인터페이스(sealed interface)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0ZL4s%2FbtsnwRT0paH%2FV7S44YzFYVnGtpm8fwazKk%2Fimg.jpg)
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. Java 15부터 무분별한 자식 인터페이스 생성을 방지하기 위해 봉인된 인터페이스를 사용할 수 있다. 인터페이스 A의 자식 인터페이스는 인터페이스 B만 가능하고, 그 이외는 자식 인터페이스가 될 수 없도록 아래와 같이 인터페이스 A를 봉인된 인터페이스로 선언할 수 있다. public sealed interface InterfaceA permits InterfaceB{ } sealed 키워드를 사용하면 permits 키워드 뒤에 상속 가능한 자식 인터페이스를 지정해야한다. 봉인된 InterfaceA를 상속하는 interfaceB는 non-sealed 키워드로 아래와 같이 선언하거나 se..
![[JAVA] 인터페이스 - default 메소드, static 메소드, private 메소드](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoAAQ6%2Fbtsnfs14wPW%2FNxyvF5LaZAGY36bkvRNBbK%2Fimg.jpg)
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 디폴트(default) 메소드인터페이스에 추상 메소드를 선언할 수 있다.추상 메소드는 애초에 실행 블록 자체를 선언할 수 없기 때문에, 실행 코드를 넣을 수 없다.하지만 디폴트 메소드는 실행 블록이 있기 때문에 실행 코드를 넣을 수 있다.일반적으로 구현 클래스가 여러 개인데, 동일한 코드를 넣어야 할 때, 일일이 다 오버라이드하기 번거로울때 쓰인다.인터페이스 안에 선언되는 메소드이므로 구현 객체가 반드시 필요디폴트 메소드를 사용하면 구현 클래스에서 따로 정의할 필요가 없다.(오버라이드 하지 않으면 모든 객체에서 동일한 기능을 함)구현 클래스에서 재정의(오버라이드)도 가능하다.(재정의..
![[JAVA] 봉인된 클래스(sealed class)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLmYUJ%2Fbtsm4Bwusgf%2FyfxsFErVi5CCXSIePupyRk%2Fimg.jpg)
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 기본적으로 final 클래스를 제외한 모든 클래스는 부모 클래스가 될 수 있다.또한 부모가 자식을 선택하는 것이 아니라, 자식이 부모를 선택해서 상속을 받을 수 있다.하지만 Java 15부터는 부모 클래스가 특정 자식 클래스에게만 상속을 허락할 수 있게 되었다. sealed 키워드를 사용하면 permits 키워드 뒤에 상속 가능한 자식 클래스를 지정해야 한다.public sealed class Person permits Employee, Manager{}이런 식으로 Person 클래스를 봉인된 클래스로 지정하고 permits 옆에 상속을 허락할 자식 클래스를 지정하면 된다. 봉인된 P..
![[JAVA] main() 메소드의 String[] 매개변수 용도](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1wOE3%2FbtsmYLfkrn6%2FMkr8OXmGWwC9K0bxglI4kK%2Fimg.jpg)
우리가 자바로 코드를 작성할 때, main함수를 선언하려면 매개변수로 args라는 String 타입 매개변수가 들어간다. 이 args 매개변수는 윈도우의 명령 프롬프트나 맥OS의 터미널에서 프로그램을 실행할 때 args에 원하는 값을 넣을 수 있다. 아래의 코드는 args의 값을 모두 출력하는 코드이다. public class Main { public static void main(String[] args) { for(int i = 0; i < args.length; ++i) { System.out.println(args[i]); } } } 이렇게 작성하고 저장을 한뒤, 명령 프롬프트로 컴파일을 한다. 이후 java 명령어를 이용하여 실행을 하되, 매개변수로 원하는 값을 넣어준다. 아래 예제에서는 매개변..
![[JAVA] 오버플로우와 언더플로우](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbazy05%2FbtsmRNKOGDV%2F2wfHgwLAIno8PKBP3cnrZ1%2Fimg.jpg)
오버플로우(overflow)란 타입이 허용하는 최대값을 벗어나는 것을 말한다. 반대로 언더플로우(underflow)는 타입이 허용하는 최소값을 벗어나는 것을 말한다. 정수 타입 연산에서 오버플로 또는 언더플로가 발생하면 해당 정수 타입의 최소값 또는 최대값으로 되돌아간다. 예를 들어 byte타입일 경우 최대값 127에서 1을 더하면 128이 되어 오버플로가 발생하여 연산 결과는 최소값인 -128이 된다. 그리고 나서 다시 1을 더하면 -127이 된다. byte value = 127; ++value; System.out.println(value); //-128 마찬가지로 -128에서 1을 빼면 -129가 되어 언더플로가 발생하는데, 연산 결과는 최대값인 127이 된다. 그리고 다시 1을 빼면 128이 된다..