java 15

인터페이스 Interface

기능들의 목록을 가지고 있는 것: 무슨 기능을 만들어야 할 지 메서드에 대한 선언만을 가지고 있다. 즉, 규칙을 잡거나, 플로우 로직을 잡는데 사용한다. 객체의 사용 방법을 정의한 타입이다. 객체의 교환성을 높여주기 때문에 Upper CamelCase로 작성된다. 확장자가 .java파일로 작성한다. 모든 필드는 public static final이어야 하며, 모든 메서드는 public abstract이어야 한다. (Java 7까지는) final, abstract를 생략하면 자동으로 붙는다. Java 8 부터는 default 메서드(구현된 메서드)와 static 메서드도 선언이 가능하다. 인터페이스의 default 메서드: JDK 8에 추가된 메서드 default 메서드가 인터페이스에 추가된 이유에 대해 ..

Programming/Java 2023.12.01

Java의 String 클래스

String 클래스 public class StringExam{ public static void main(String[] args) { String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); } } new로 생성하지 않은 경우 상수 취급된다. 따라서 str1과 str2는 같은 것을 참조한다. new를 사용한 str3는 힙 메모리에 항상 새로운 객체를 생성한다. Reference 타입에서 ==는 같은 객체를 참조하는지 확인하는 연산자이다. 그래서 str1, str2, str3 를 비교하게되면 ==로 비교했을 때 1, 2는 참이 나오지만 1, 3을 비교하면 거짓이 나온다. 만약 new로 새로운 hello를 만들어 st..

Programming/Java 2023.11.30

추상 클래스 2: 템플릿 메서드 패턴 Template Method Pattern

추상 클래스는 템플릿 메서드 패턴에서 가장 잘 사용할 수 있다: 템플릿 메서드 패턴에 대해 살펴보도록 하자. 다음 같은 상황이라고 생각해보자. Controller 종류가 여러개 → { 초기화 - 같은 코드 실행 - 다른 코드 마무리 - 같은 코드 } Controller의 종류를 여러개 만들어 여러 종류의 케이스에 대해서 각각 처리를 하도록 Cotroller(추상클래스)를 부모로 하여 모델을 구현해 보자. 각 클래스는 적절하게 패키지를 작성하는 것이 좋다: 패키지 도메인은 생략 public abstract class Controller { protected final void init() { System.out.println("작업 시작"); } protected final void close() { Sy..

Programming/Java 2023.11.30

추상 클래스 1: 추상 클래스란

여러가지 속성들을 추상화하여 일반적인 속성만을 모아놓은 추상 클래스로 작성할 수 있다. 추상클래스는 인스턴스가 될 수 없다. 추상 클래스를 상속받는 자손이 인스턴스가 된다. abstract 키워드를 사용하여 클래스를 정의한다. 1개 이상의 추상 메서드로 이루어진다. 시리즈 추상 클래스 1: 추상 클래스란 추상 클래스 2: 템플릿 메서드 패턴

Programming/Java 2023.11.30

Java 생성자와 super(), Immutable

Java 생성자의 특징 기본 생성자는 생성자 오버로딩이 하나라도 되어있으면 자동으로 생성되지 않는다. 기본 생성자나 아무것도 초기화하지 않는 생성자의 경우 super() 생성자를 자동으로 포함하여 컴파일한다. 사용자가 super()생성자를 호출하는 코드를 작성하지 않으면 자동으로 부모의 기본 생성자가 호출된다. 만약 부모 클래스에 기본 생성자가 없을 경우에는 필요한 인자를 super()의 인자를 통해 전달하는 코드를 작성해야만 한다. 부모 클래스의 생성자로 초기화 후 자식 클래스 생성자가 초기화를 진행해야 한다는 것. 자신의 생성자를 호출할 때는 this()를 사용한다. this() 생성자는 생성자 내에서만 사용할 수 있다. 생성자 안에서 super()생성자를 호출하는 코드 다음이나, 첫번째 줄에 위치해..

Programming/Java 2023.11.30

다형성 Polymorphism

다형성 Polymorphism 다형성 Polymorphism: 프로그램 언어 각 요소(상수, 변수, 식, 객체, 메서드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다(위키피디아, [다형성]). 또는 여러 형태를 받아들일 수 있는 성질, 상황에 따라 의미를 다르게 부여할 수 있는 특성 등으로 정의하기도 한다. 다형성을 활용하면 기능을 확장하거나, 객체를 변경해야 할 때 타입 변경 없이 객체 주입만으로 수정이 일어날 수 있다. 또한 상속을 사용하여 중복 코드까지 제거할 수 있어 객체 지향 설계와 가까워질 수 있다. 다형성 구현에는 다양한 방법이 있을 수 있지만, 오버로딩, 오버라이딩, 함수형 인터페이스가 대표적이다. - Tecoble, [다형성] 페이지에서 오버로딩 Overloadi..

Programming/Java 2023.11.28

상속

~ Is a ... / Kind of ~ 관계 ( ~는 ...다/ ...는 ~ 종류이다.) 상속 = 일반화 기능 + 확장 기능 상속은 가장 강한 결합도를 가진다. 반드시 써야할 때만 사용하고 가급적 사용하지 않는 것이 좋다. 결합도를 낮추고 응집도를 높여야 활용성이 높아지므로. 아무것도 상속하지 않으면 자동으로 java.lang.Obeject를 상속 받는다. [접근제한자] [ abstract | final ] class 클래스명 extends 부모 클래스명 { ... } Question: 참조 변수가 자식 클래스의 객체를 참조하고 있는 경우 어떤 일이 발생할까? Car car = new Bus(); 와 같은 경우는 어떤일이 벌어질까? 객체는 Bus가 생성되지만 그 객체를 가르키는 car변수는 Car로 생..

Programming/Java 2023.11.28

자바에서의 객체 관리 2: 각종 변수들의 생성과 사용

클래스정보의 등록 Java Heap은 JVM이 관리하는 메모리, native memory는 운영체제에서 관리하는 메모리이다. 이 메모리에는 처음 프로그램이 실행될 때 클래스 정보들이 올라가게 된다. 소스 코드, 클래스 파일 자체는 정적이다. HDD나 SSD의 경우 RAM보다 속도가 느리기때문에 매번 보조기억장치에서 이를 읽어들이는 것은 성능을 저하시킨다. 따라서 클래스 정보는 처음 사용될 때 메모리에 그 정보를 올리고 필요할 때마다 가져오는 것이다. → 이미 클래스에 대한 정보를 PERM 혹은 Metaspace에 올려두고, 객체가 생성될 때마다 사용하는 것이다. Static 정보의 생성 Java 7까지는 non-heap영역, 8 이상부터는 heap에 저장한다. 클래스가 로딩될 때 한 번 메모리에 올라가 ..

Programming/Java 2023.11.27

자바 파일의 실행과정 - 초급

이번에는 자바 프로그램의 실행에 대한 전체적인 개념만 잡고 넘어가는 것으로 하고, JVM에 대해서는 참고자료의 아티클을 통해 조금 더 자세하게 정리해보도록 하자. 1. .java 파일의 컴파일: .class 파일 javac vendingMachine.java javac vendingMachineMain.java → vendingMachine.java, vendingMachine.class / vendingMachineMain.java, vendingMachineMain.class 파일 생성 Class 파일은 바이트코드로 이루어져 있으며, 바이트코드는 플랫폼 독립적이므로, 플랫폼에 관계없이 일정하게 번역된다. 바이트코드는 바이너리 코드로 되어있지만, 소프트웨어 단에서 해석이 가능하므로 기계어보다는 추상화되..

Programming/Java 2023.11.24

자바에서의 객체 관리 1: 인자 전달

데이터를 주고받는 데에는 값으로 전달(Call by value), 포인터로 전달(Call by pointer), reference로 전달(Call by reference)이 존재한다. C 언어에서는 값으로 전달하거나 포인터로 주고받는 방식을 구현할 수 있다. 또한 C++에서는(추가로) 참조 자료형을 int&, double&과 같이 기본 자료형에 &를 붙여서 참조 자료형으로 사용할 수도 있다. 자바에서는 모든 것이 객체이므로(객체 지향 언어는 객체간의 상호작용을 중시한다.) 이 객체를 모조리 복사해서 전달하는 것은 비효율적이다. 따라서 기본적으로 메서드에 인자를 전달하거나 리턴 값을 받을 때에 대부분 reference로 전달하는 방식으로 인자가 전달된다. 자바에서 메서드를 호출할 때 매개변수로 지정한 값을..

Programming/Java 2023.11.22