Java 5

[JAVA] static 메서드에서 non-static 멤버에 접근

static 메서드는 같은 클래스의 non-static 멤버에 접근할 수 없다. 그 이유는 뭘까?non-static vs staticnon-static 멤버는 인스턴스 변수이다. 객체가 생성될 때마다 각기 다른 값을 갖는다.static 멤버는 클래스 변수이다. 클래스가 메모리에 로드될 때 단 한 번만 수행되고 모든 객체가 이 값을 공유한다.왜 static 메서드에서 non-static 접근이 안 되는가import java.io.*;class Person{ private String name; public Person(String name){ this.name = name; } static String get(){ return name; //static 함수는..

Java 2024.04.15

[JAVA] Comparable로 객체 정렬하기

객체 정렬은 Kruskal로 MST를 구할 때 자주 쓰이는 문법이다. 엣지의 가중치를 오름차순으로 정렬한 후 엣지를 앞에서부터 선택하면 MST를 만들 수 있기 때문이다. 그런데 compareTo의 리턴값을 어떻게 설정해야 객체가 오름차순 또는 내림차순으로 정렬되는지 매번 헷갈려서 간단히 정리하고 넘어가려고 한다. 객체를 정렬하는 방법?정렬하고자하는 객체들을 리스트에 넣어 Arrays.sort()를 호출하면 된다. Arrays.sort() 호출 시 Comparable 인터페이스의 compareTo() 메서드가 호출된다. compareTo() 메서드는 두 객체를 특정 기준으로 비교하여 int값을 리턴하는 함수인데, compareTo()에 의해 양수가 리턴되면 두 객체의 자리를 바꾸는 식으로 정렬이 이루어진다..

Java 2024.04.14

[JAVA] String Constant Pool

String constant pool String 객체에 값을 할당하는 방법은 두 가지가 있습니다. 리터럴 대입 new 키워드 사용하여 대입 String str1 = "hello"; String str2 = new String("hello"); String str3 = "hello"; String str4 = new String("hello"); System.out.println(str1==str2); //false System.out.println(str1==str3); //true System.out.println(str2==str4); //false str1, str3은 리터럴을 바로 대입했고 str2, str4는 new 키워드를 사용해 문자열을 대입했습니다. 네 변수 모두 "hello"라는 문자열..

Java 2024.03.10

[JAVA] String과 StringBuffer/StringBuilder

지금까지 코테 문제를 풀면서 StringBuffer을 사용한 이유는 그 순간에 StringBuffer을 사용하는 것이 성능에 도움이 될 것이라 판단했기 때문이라기보다는, 그저 append기능을 쓰기 위해서였습니다.그리고 문자열 연산 시 String의 문자열 합치기 기능보다 더 성능이 낫다고 들어서 정도의 이유였죠..또 StringBuffer보다 StringBuilder가 단일 스레드 연산에 더 효율적이라는 글을 읽은 뒤로는 StringBuilder을 열심히 썼어요. 과연 그 말이 항상 옳을까요? 그리고 셋의 차이점은 무엇일까요? String과 StringBuffer/StringBuilder은 모두 문자열을 다루는 클래스입니다.이중 어느 것을 사용하는 게 성능이 좋을지는 각 클래스의 특징을 알아야 판단할 ..

Java 2024.03.09

[JAVA] 다형성이란? 다형성이 필요한 이유 | 오버라이딩, 오버로딩, 타입 변환(업캐스팅)

다형성은 무엇이고, 왜 필요할까요? 다형성은 객체 지향적 설계를 위한 4가지 원리 중 하나입니다. 여기서 알 수 있듯이 다형성의 목적은 객체 지향의 실현입니다. 다형성이 어떻게 객체 지향을 실현하는지 살펴봅시다. 다형성이란? 다형성은 어떤 객체의 속성이나 기능이 상황에 따라 다른 역할을 수행할 수 있는 것을 의미합니다. 다형성은 오버라이딩, 오버로딩, 타입 변환 등에서 다양하게 나타날 수 있는데요, 하나씩 설명해보겠습니다. (1) 오버라이딩 상위 클래스 메서드를 하위클래스에서 재정의하여 사용 public interface Vehicle { //Vehicle 인터페이스 void start(); void moveForward(); void moveBackward(); } public class Car imp..

Java 2024.03.06