Java 15

[Java] 인터페이스에도 완성된 메서드를 쓴다고?

*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다. 지금까지 인터페이스는 상수와 추상 메서드만 선언할 수 있는, 말 그대로 '껍데기'라고만 알고 있었다. 그런데 오늘 인터페이스에도 구현된 메서드, 즉 static과 default 메서드를 정의할 수 있다는 사실을 처음 알게 되었다. 처음 알게 된 개념이어서 궁금한 점이 많았고, 여러 자료를 찾아보며 공부한 내용을 이 글에 정리해 보았다. 결과부터 말하자면, 이전에는 내가 알던 대로 인터페이스에는 무조건 추상 메서드만 쓸 수 있었다. 하지만, 자바 8부터는 완성된 default 메서드와 static 메서드를 쓸 수 있게 된 것이다. 우선 인터페이스에서의 default 메서드와 static 메서드에 대해1. 호출..

뭐지? 2025.04.23

[Java] 컬렉션 프레임워크와 Big O 표기법을 통한 간단한 성능 비교 : 개발자는 소프트웨어의 성능을 향상시키기 위해 존재한다.

*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다. 컬렉션 프레임워크란?컬렉션 : 여러 객체를 모아 놓은 것.프레임워크 : 표준화, 정형화된 체계적인 프로그래밍 방식 -> 컬렉션 프레임워크 : 데이터를 효율적으로 저장하고 처리하기 위한 자료구조와 알고리즘을 제공하는 Java의 표준 라이브러리. 위 그림은 Collection 인터페이스 상속 계층도이고, 여기서 검은색 박스는 인터페이스, 파란색 박스는 각 인터페이스를 상속받아 구현한 클래스들이다. 각 인터페이스들에 대해 간단하게 설명하자면, List는 순서 O, 중복 OSet은 순서 X, 중복 XMap은 Key, Value쌍으로 데이터를 저장하는 자료구조이며, key는 중복 X, value는 중복O Q..

개인 공부/JAVA 2025.04.22

[Java] 두 변수가 같은 값을 가지는데 왜 다르다고 나올까?

*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다. 제목에 대한 답을 얻기 위해서는 우선, 자바에서의 "동등성"과 "동일성"에 대해 이해해야 한다.우리는 자바를 공부하면서 "동등성"과 "동일성", 그리고 "equals 메서드"와 "=="에 대해 들어본 적이 있을 것이다. 자바에서 동등하다는 것은 "값"이 같다는 것을 의미하고, 동일하다는 것은 "주소"가 같다 즉, 같은 객체를 가리킨다는 것을 의미한다. 또한, equals 메서드는 기본적으로는 주소비교지만, 오버라이딩 시 내용 비교가 가능하고, String, Integer, List, Set, Map 등은 기본적으로 내용 비교로 오버라이딩 되어 있다. 반면, 연산자 "=="은 기본형인 경우에만 "값"을 비교하..

뭐지? 2025.04.22

[Java] 메서드에 값을 넘겼는데 값이 왜 안 바뀔까?

*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다.*본 게시물은 남궁성 강사님의 자바의 정석 교재를 참고하여 작성하였습니다. Q) 첫 번째 코드와 두 번째 코드의 출력값이 각각 어떻게 나올까? 이유는 뭘까?스크롤을 내려 글을 읽으시기 전에 먼저 스스로 답을 생각해 보시길 바랍니다. 두 코드의 출력값이 다르게 나오는 이유는 change 메서드의 매개변수 타입이 다르기 때문이다.-> 매개변수의 타입이 기본형일 때와 참조형일 때의 차이를 이해해야한다. 자바에서는 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수에 복사하여 전달한다. 매개변수가 기본형이면 값 자체가 복사되어 전달되므로, 메서드 내에서 변경해도 원본 변수(인스턴..

뭐지? 2025.04.19

[Java] p는 Child 객체인데, 왜 p.x는 Child의 변수가 아닐까?

오늘 아래의 연습 문제를 풀다가 이해가 되지 않는 부분이 생겨서 그 부분에 대해 공부한 후 이 글을 쓰게 되었다. Q) 다음의 코드를 실행한 결과를 적으시오. 내가 했던 생각을 적어보자면, Parent p = new Child();에서 p가 가리키는 객체는 Parent타입이지만 Child의 객체이다. 따라서 p.x는 Child 객체의 x값이 출력돼야 하고, p.method()를 호출하면 Child 클래스의 메서드 내용이 출력돼야 한다. 따라서 이 코드를 실행한 결과는p.x = 200child Methodc.x = 200child Method이다. 하지만 실제 출력 결과는 달랐다. 출력의 첫 줄에서 p.x = 200이 아니라 p.x = 100이 출력되었다. 이 출력 결과를 보고 이해가 가지 않아서 ..

뭐지? 2025.04.16

2025-04-14 Java 문제 풀이

*코드 개선을 위한 훈수 언제나 환영입니다. 우선 문제를 읽고 CARD_NUM만큼 for문을 돌면서 cards배열에 차례대로 카드 번호와 광 여부를 넣어야겠다. 1~10이 두 번 반복되는데 그중 한 번만 num이 1, 3, 8일 때 광이여야 한다고 생각했습니다. 따라서 i 위의 내용을 바탕으로 작성한 코드는 아래와 같습니다. **실행 순서 : SutdaDeck deck = new SutdaDeck();으로 객체를 생성하려고 할 때, 생성자 SutdaDeck()이 호출되고, 메서드를 사용하려고 하면 이때 생성된 객체 deck을 바탕으로 메서드가 호출된다. ex) deck.shuffle(); 이렇게 작성했더니 출력창에 아무것도 출력되지 않았습니다.코드에 뭔가 오류가 있는 것 같은데 고민..

[Java] 멤버 변수(클래스 변수, 인스턴스 변수)와 지역 변수

*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다.  변수(Variable)의 분류  변수는 선언하는 위치에 따라 멤버 변수와 지역 변수로 나뉜다. 멤버 변수는 선언 위치가 클래스 영역이고, 지역 변수는 선언 위치가 메서드나 생성자 내부이다. 멤버 변수는 다시 클래스 변수와 인스턴스 변수로 나눌 수 있는데, 클래스 변수는 모든 객체가 공통적으로 같은 속성을 가질 때 사용한다. 또한, 클래스 변수는 static 키워드를 사용하고, 객체를 생성하지 않아도 사용할 수 있다. 인스턴스 변수는 각각의 객체마다 개별적인 속성을 가질 때 사용하고, 클래스 변수와 달리 객체를 생성해야 사용할 수 있다. 지역 변수는 메서드 내에 선언되어 메서드 내에서만 사용할 수 있는 변수이..

개인 공부/JAVA 2025.04.03

[Java] 자바 메서드 선언 (접근자, static, 반환 타입)

*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다. 메서드 (Method)메서드는 객체의 기능을 구현하기 위해 클래스 내부에 작성하는 함수이다. 즉, 특정한 기능을 수행하는 코드들을 하나로 묶은 것이라고 할 수 있다. 메서드는 크게 선언부(Head)와 구현부(Body)로 나뉘고, 호출하여 사용한다. 메서드는 입력값, 출력값이 있을 수도 있고 없을 수도 있다. 자바에서는 메서드를 선언할 때, public static void 메서드 명 { 메서드 내용 }, void 메서드 명 { 메서드 내용 }과 같이 선언한다. 여기서 선언부의 메서드 명 앞에 붙어 있는 public, static, void와 같은 것들이 무엇인지 대충은 알고 있었지만, 이 개념에 대해 누가 물..

개인 공부/JAVA 2025.04.02

[Java] 추상 클래스와 인터페이스

*본 게시물은 마이자몽님의 블로그를 참고하여 작성하였으며, 글 하단에 출처를 기록해 두었음을 밝힙니다.*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다. 본인은 지금까지 추상 클래스와 인터페이스에 대해 대충은 알고있었지만 정확히 언제, 왜 사용하는지를 알지 못했었다. 오늘 공부를 하다가 관련 내용이 나왔는데, 이제라도 정확히 공부해 두자라는 생각으로 GPT와 구글 검색을 통해 공부를 한 후 이 글을 작성하였다. 추상 클래스란?추상 클래스는 클래스 선언 시 앞에 예약어 'abstract'를 붙여 선언한다. 또한, 클래스 내에 추상 메서드를 선언하여 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스이다. 추상 클래스 내의 일반 메서드는 그대로 상속받아서 사용..

개인 공부/JAVA 2025.03.27

[Java] 절차지향과 객체지향의 비교

*본 게시물은 인프런 김영한 강사님의 자바 강의를 참고하여 작성하였습니다. *본 게시물은 불곰님의 블로그를 참고하여 작성하였으며, 글 하단에 출처를 기록해두었음을 밝힙니다.*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다. 절차지향 프로그래밍(Procedural Programming)이란?절차지향 프로그래밍이란 프로그램이 위에서부터 아래로 순차적으로 실행되도록 하는 프로그래밍 기법이다. 절차 지향 프로그래밍에서는 데이터와 기능(함수)이 따로 존재하고, 함수가 데이터를 처리하는 방식이다. 절차지향 프로그래밍은 코드가 직관적이므로 초보자가 이해하기 쉽고, 일반적으로 실행 속도가 빠른 편이다. 하지만 코드가 커지면 유지보수가 어려워질 수 있다. 정리하자면, 절차지..

개인 공부/JAVA 2025.03.06