Java 67

[인프런] ENUM

타입 안전 열거형 패턴 - Type-Safe Enum Pattern 이란?열거형(Enum)은 관련된 상수들의 집합을 의미한다.예를 들어, 요일, 달, 방향 등을 열거형으로 표현할 수 있다. 자바 5 이전에는 상수를 정의하기 위해 public static final을 사용했지만, 이는 타입안전을 보장하지 못했다. 자바 5부터는 enum 키워드를 사용하여 타입안전한 열거형을 정의할 수 있게 되었다. 열거형을 사용할 때는 class가 아닌 enum으로 만들어준다.enum은 열거형 내부에서 상수로 지정하는 것 외에 직접 생성이 불가능 하다. 생성할 경우 컴파일 오류가 발생한다. => 오류 메시지 : enum classes may not be instantiated 타입안전 열거형의 장점타입 안전성: 열거형을 사..

Java 2024.06.15

[인프런] Class 클래스

자바에서 Class 클래스는 클래스의 정보를 다루는데 사용된다.  Class 클래스는 java.lang 패키지에 속하며, 실행 중인 Java 애플리케이션 내의 모든 클래스와 인터페이스에 대한 메타데이터를 담고 있는 반사(reflection)의 중심적인 역할을 한다. 즉, Class 객체는 특정 클래스의 속성과 메소드, 생성자 등에 대한 정보를 포함하고 있으며, 이를 통해 동적으로 객체를 생성하거나 메소드를 호출하는 등의 작업을 수행할 수 있다. Class 클래스의 주요 기능타입 정보 얻기 : 클래스의 이름, 슈퍼 클래스, 인터페이스, 접근 제한자 등과 같은 정보를 조회할 수 있다.리플렉션 : 클래스에 정의된 메서드, 필드, 생성자 등을 조회하고 이들을 통해 객체 인스턴스를 생성하거나 메서드를 호출하는 등..

Java 2024.06.09

[인프런] 래퍼 클래스

기본형 데이터는 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없다. 기본형 데이터는 null 값을 가질 수 없다. 항상 값을 가져야 한다. => 기본형 데이터를 클래스화하여 사용한다. ( wrapper 클래스 ) 래퍼클래스 기본 데이터 타입(primitive data types)을 객체로 다루기 위한 클래스이다. Java는 객체 지향 프로그래밍 언어이기 때문에 때때로 기본 데이터 타입을 객체로 다루어야 하는 경우가 있다.자바가 제공하는 기본 클래스는 불변이며, equals 로 비교해야 한다.기본형을 래퍼 클래스로 변경하는 것을 마치 박스에 물건을 넣은 것 같다고해서 박싱이라고 한다. 기본 데이터 타입과 그에 해당하는 래퍼 클래스byte - Byteshort - Shortint - Int..

Java 2024.06.09

[인프런] String 클래스

String 클래스 - 기본자바에서 문자를 다루는 대표적인 타입은 char, String 두가지가 있다.String은 대문자로 시작한다. 즉, 클래스이다. 따라서 String 을 사용할 때 쌍따옴표로 사용하는 것도 가능하고, 객체를 생성하는 것도 가능하다. 문자열은 매우 자주 사용되므로 편의상 쌍따옴표로 문자열을 감싸면 자바 언어에서 new String("hello") 와 같이 변경해준다.  String 클래스 구조클래스이므로 속성과 기능을 가진다.속성 ( 필드 )String의 실제 문자열 값이 보관된다. 문자 데이터 자체는 char [ ]에 보관된다. (자바 9부터는 char[ ] 대신 byte [ ] 를 사용 )Stirng 클래스는 개발자가 직접 다루기 불편한 char[ ] 을 내부에 감추고 편리하게..

Java 2024.06.08

[인프런] 기본형과 참조형의 공유

자바의 데이터 타입을 가장 크게 보면 기본형과 참조형으로 나눌 수 있다.기본형 : 하나의 값을 여러 변수에서 절대로 공유하지 않는다.참조형 : 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다.기본형 변수는 하나의 값을 절대로 공유하지 않는다. 따라서 값을 변경해도 변수 하나의 값이 변경된다.참조형 변수들은 같은 참조값을 통해 인스턴스를 참조할 수 있다. 자바에서 모든 값 대입은 변수가 가지고 있는 값을 복사해서 전달한다. 변수가 int와 같은 숫자값을 가지고 있으면 숫자값을 복사해서 전달하므로 같은 인스턴스를 참조하게 된다. 😮참조형 변수는 참조값을 통해 같은 객체( 인스턴스 )를 공유할 수 있다.반면 기본형 변수는 절대로 같은 값을 공유하지 않는다.  공유 참조와 사이드 이펙트사이드 이펙트..

Java 2024.06.06

Labelled Loop ( 이름을 가지는 반복문 )

반복문에 이름(label)을 설정하고 이를 사용하여 특정 반복문을 빠져나가는 방법은 Java에서 중첩되 반복문을 효율적으로 관리할 때 매우 유용하다. 이 기능을 이용하면 여러 반복문이 중첩된 상황에서 일반적인 break문은 단 하나의 반복문만을 빠져나가게 해주므로, 단순한 break문으로는 해결할 수 없는 복잡한 제어 흐름을 간단하게 처리할 수 있다. 기본 개념Labelled Loop는 반복문 앞에 이름을 붙여서 특정 반복문을 식별할 수 있게 한다.break 문이나 continue문과 함께 사용하여 특정 반복문을 제어할 수 있다.  구문이름은 반복문의 키워드 바로 앞에 위치해야 한다.이름과 반복문의 키워드 사이에 다른 명령문이 들어가면 컴파일 오류가 발생한다. 예시public class LabelledB..

Java 2024.06.03

Enhanced for문

자바의 향상된 for문은 배열이나 컬렉션을 순회하기 위해 사용되는 구문으로, for-each loop라고도 불린다.기존의 for문에 비해 코드가 간결하고 읽기 쉬워서 반복적인 작업을 처리할 때 많이 사용된다. 기본 구조for (타입 변수명 : 배열 또는 컬렉션) { // 반복할 코드} 타입 : 배열 또는 컬렉션에 포함된 요소의 타입변수명 : 반복되는 각 요소를 참조할 변수의 이름배열 또는 컬렉션 : 순회할 배열 또는 컬렉션int[] numbers = {1, 2, 3, 4, 5};for (int number : numbers) { System.out.println(number);} 위 코드는 numbers 배열의 각 요소를 순회하며, 순회하는 각 요소의 값을 number 변수에 할당하고 그 값을..

Java 2024.06.03

[인프런] equals( )

정적 의존관계와 동적 의존관계정적 의존관계 : 컴파일 시간에 결정되며, 클래스 간의 관계를 의미한다. 프로그램을 실행하지 않고, 클래스 내에서 사용하는 타입들만 보면 쉽게 의존관계를 파악할 수 있다.동적 의존관계 : 프로그램을 실행하는 런타임에 확인할 수 있는 의존관계이다. 런타임에 어떤 인스턴스를 사용하는지를 나타내는 것을 말한다. 단순히 의존관계 또는 어디에 의존한다고 하면 주로 정적 의존관계를 의미한다.  자바는 두 객체가 같다라는 표현을 2가지로 분리해서 제공한다.동일성(Identity) :  == 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인동등성(Equality) : equals( ) 메서드를 사용하여 두 객체가 논리적으로 동등한지 확인동일성은 물리적으로 같은 메모리에..

Java 2024.06.02

[인프런] toString( )

Object.toString(  ) 메서드는 객체의 정보를 문자열 형태로 제공하여 디버깅과 로깅에 유용하게 사용된다.Object가 제공하는 toString(  )메서드는 기본적으로 패키지를 포함한 객체의 이름과 객체의 참조값(해시코드)를 16진수로 제공한다.  toString(  ) 오버라이딩 Object.toString(  ) 메서드가 클래스 정보와 참조값을 제공하지만 이 정보만으로 객체의 상태를 적절히 나타내지 못하므로, toString(  )을 오버라이딩 해서 정보를 제공하는 것이 일반적이다. 오버라이딩 하지 않으면 16진수로 나옴위와 같은 모양으로 출력됨 toString(  )을 오버라이딩 하면, @Overridepublic String toString() { return "Dog{" + ..

Java 2024.06.02

[인프런] Object 클래스

자바에서 모든 클래스의 최상위 부모 클래스는 Object 클래스이다.부모가 없을 경우 묵시적으로 Object 클래스를 상속받는다. ( extends Object 가 있는 것과 같다. ) 묵시적 ( Implicit ) : 개발자가 직접 기술하지 않아도 시스템 또는 컴파일러에 의해 자동으로 수행되는 것을 의명시적 ( Explicit ) : 개발자가 직접 기술해서 작동하는 것을 의미 자바에서 Object 클래스가 최상위 부모 클래스인 이유공통 기능 제공객체의 정보를 제공하고, 이 객체가 다른 객체와 같은지 비교하고, 객체가 어떤 클래스로 만들어졌는지 확인하는 기능은 모든 객체에게 필요한 기능이다. 이렇게 모든 객체에 필요한 공통 기능을 제공하여 모든 객체에서 해당 기능을 상속받아 사용할 수 있다.객체의 정보를..

Java 2024.06.02

[인프런] java.lang 패키지

자바가 기본으로 제공하는 라이브러리 중 가장 기본이 되는 것이 java.lang 패키지이다.여기서 lang은 Language의 줄임말로, 자바 프로그래밍 언어의 핵심을 구성하는 클래스들을 포함하고 있다. java.lang 패키지의 대표적인 클래스Object : 모든 자바 객체의 부모 클래스String : 문자열Integer, Long, Double : 래퍼 타입, 기본형 데이터 타입을 객체로 만든 것Class : 클래스 메타 정보System : 시스템과 관련된 기본 기능들을 제공 java.lang 패키지는 모든 자바 애플리케이션에 자동 임포트 되기 때문에 임포트 구문을 사용하지 않아도 된다.          공부 내용: [인프런] 김영한의 실전 자바 - 중급 1편

Java 2024.06.02

[인프런] 객체 지향

객체 지향 특징객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 이용된다.역할과 구현을 분리하면,클라이언트는 대상의 역할(인터페이스)만 알면 된다.클라이언트는 구현 대상의 내부 구조를 몰라도 된다.클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다. 자바 언어의 다형성을 활용역할 = 인터페이스구현 = 인터페이스를 구현한 클래스, 구현 객체객체를 설계할 때 역할과 구현을 명확히 분리객체 설계시 역할을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.( 클라이언트 : 요청, 서버 : 응답 )자바 언어의 다형성오버라..

Java 2024.05.28

[인프런] 인터페이스

인터페이스자바는 앞서 공부한 순수 추상 클래스를 더 편리하게 사용할 수 있는 인터페이스라는 기능을 제공한다.인터페이스는 class가 아니라 interface라는 키워드를 사용하면 된다.인터페이스의 메서드는 모두 public, abstract이다.메서드에 public abstract를 생략할 수 있으며, 생략이 권장된다.인터페이스는 다중 구현( 다중 상속 )을 지원한다.인터페이스와 멤버 변수인터페이스에서 멤버 변수는 public, static, final이 모두 포함되어 있다고 간주된다.클래스, 추상 클래스, 인터페이스는 프로그램 코드, 메모리 구조상 모두 똑같다. 모두 자바에서는 .class로 다루어지고 인터페이스를 작성할 때도 .java에 인터페이스를 정의한다.인터페이스는 순수 추상 클래스와 비슷하다고..

Java 2024.05.28

[인프런] 추상 클래스

추상 클래스추상 클래스는 이름 그대로 추상적인 개념을 제공하는 클래스이다. 따라서 실체인 인스턴스가 존재하지 않는다.대신 상속으로 사용되고, 부모 클래스 역할을 담당한다.추상 클래스는 클래스를 선언할 때 앞에 추상이라는 의미의 abstract  키워드를 붙여주면 된다.추상 클래스는 기존 클래스와 완전히 같으나, new를 사용해 직접 인스턴스를 생성하지 못하는 제약이 추가된 것이다. 추상 메서드부모 클래스를 상속 받는 자식 클래스가 반드시 오버라이딩 해야 하는 메서드를 부모 클래스에 정의할 수 있다.이를 추상메서드라고 한다. 추상메서드는 추상적인 개념을 제공하는 메서드로 실체가 존재하지 않고, 메서드 바디가 없다.추상 메서드는 선안할 때 메서드 앞에 abstract 키워드를 붙인다.추상 메서드가 하나라도 ..

Java 2024.05.28

[인프런] 다형성과 메서드 오버라이딩

오버라이딩 된 메서드가 항상 우선권을 가진다. 기존 기능을 덮어 새로운 기능을 재정의 한다는 뜻의 오버라이딩이다.// 부모 변수가 자식 인스턴스 참조Parent poly = new Child();System.out.println("Parent -> Child");System.out.println("value = " + poly.value); // 변수는 오버라이딩Xpoly.method(); // 메서드 오버라이딩poly변수는 Parent 타입이므로 poly.value, poly.method( )를 호출하면 Parent타입에서 기능을 찾아서 실행한다.따라서 poly.value는 Parent타입에 있는 value값을 읽는다.poly.method( )는 Parent 타입에 있는 method(  )를 실행하려고..

Java 2024.05.28