백앤드/JAVA 9

[JAVA] 추상 클래스와 인터페이스의 차이

1. [추상 클래스]개념: abstract 키워드로 선언된 클래스*추상 메서드를 최소 한 개 이상 가지고 abstract로 선언된 클래스최소 한 개의 추상 메서드를 포함하는 경우 반드시 추상 클래스로 선언하여야 한다.*추상 메서드가 없어도 abstract로 선언한 클래스그러나 추상 메서드가 하나도 없는 경우라도 추상 클래스로 선언할 수 있다.*추상 클래스의 구현서브 클래스에서 슈퍼 클래스의 모든 추상 메서드를 오버라이딩하여 실행가능한 코드로 구현한다.추상 클래스의 목적객체(인스턴스)를 생성하기 위함이 아니며, 상속을 위한 부모 클래스로 활용하기 위한 것이다.여러 클래스들의 공통된 부분을 추상화(추상 메서드) 하여 상속받는 클래스에게 구현을 강제화하기 위한 것이다. (메서드의 동작을 구현하는 자식 클래스로..

백앤드/JAVA 2024.10.18

[JAVA] final, finally, finalize()

1. [final 키워드는 변경 불가능하게 한다]적용 대상효과기본형 변수(Primitive)해당 변수 값 변경 불가참조형 변수(Reference)*참조 변수가 힙 내 다른 객체를 가르키도록 변경 불가메서드해당 메서드 오버라이드 불가클래스해당 클래스 상속 불가 *참조 변수가 힙 내 다른 객체를 가르키도록 변경 불가public class FinalExample { public static void main(String[] args) { final StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); // 객체의 상태는 변경 가능 (문자열 추가) // sb = new StringBui..

백앤드/JAVA 2024.10.18

[JAVA] Wrapper Class는 기본 자료형을 객체로 변환한다

1. [Wrapper Class 사용 용도]*기본 자료형을 객체 타입으로 변환해야하는 경우 기본 타입(Primitive Type)Wrapper ClassbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean*박싱 방향: ->*언박싱 방향: *기본 자료형을 객체 타입으로 변환해야하는 경우 ▪️ 객체로 저장해야할 경우 ▪️ 매개변수로 객체가 요구될 경우 (ex. *제네릭, Collecion 타입) ▪️ 객체간 비교가 필요할 경우 *제네릭 : 모든 종류의 타입을 다룰 수 있도록 일반화된 타입 매개변수로 클래스나 메서드를 선언하는 기법* 오토 박싱, 오토 언박싱: JDK 1.5부터는 자바 컴파일러가 알아서 자동 처..

백앤드/JAVA 2024.10.18

[JAVA] 객체지향 프로그래밍 (OOP,Object Oriented Programming)

1. [객체 지향 프로그래밍이란 프로그램을 객체 단위로 구성하고, 각 객체  간 관계 및 상호작용을 프로그램으로 나타낸 것 이다]장점코드의 재사용성이 높다. - 누군가의 코드를 갖다쓰기도, 상속하기도, 확장하기도 쉽다.유지 보수가 쉽다. - 해당 부분만 수정하면 된다.대형 프로젝트에 적합하다. - 업무 분담이 쉽다.즉, 강한 응집력(단일 책임)과 약한 결합력(약한 의존)을 가진다.단점처리 속도가 느리다. - 객체 간 정보 교환이 모두 메시지 교환을 통해 일어나므로 많은 오버헤드가 발생한다. 하지만 하드웨어의 발전으로 어느 정도 해소된 단점이다.객체가 많으면 용량이 커진다.설계시 많은 노력과 시간이 든다.2. [객체 지향의 특징 (APIE)- 4가지 ]Abstraction(추상화) : 필요한 정보만 표현함..

백앤드/JAVA 2024.10.18

[JAVA] String, StringBuilder, StringBuffer 차이

1. [String은 불변 객체다]불변 객체(immutable)하기 때문에 +같은 concat연산을 수행하면 원본을 변경하지 않고, 새로운 String 객체를 생성한다. 이로 인해 메모리 공간의 낭비가 발생하고, 성능이 떨어진다.JDK 1.5부터는 String 객체를 +연산자로 연결할 때, 컴파일 타임에서 StringBuilder로 변경된다고 한다.불변 객체이기 때문에 멀티 쓰레드 환경에서 동기화를 신경쓰지 않아도 됨다.문자열 연산이 적고, 조회가 많은 상황에서 쓰기 좋다.2. [StringBuilder와 StringBuffer는 변경 가능 객체라는 공통점이 있지만 멀티쓰레드 지원 유무의 차이가 있다]공통점변경 가능 객체(Mutable)한 객체이다. 따라서 문자열 연산시 처음 만든 객체를 이용해 문자열을..

백앤드/JAVA 2024.10.18

[JAVA] 자바는 Call by Value방식이다

1. [Call by Value와 Call by Reference의 차이]Call by Value: 함수 호출 시 값을 복사해서 전달. 값을 복사해야하므로 생성한 변수마다 스택에 메모리 할당.Call by Reference: 함수 호출 시 참조하고있는 주소를 전달. 원본데이터에 접근해서 수정 가능함.2. [자바는 Call by Value방식이다]Primitive Type(원시 자료형) (int,short,long,float,double,char,boolean) 에서는 값 자체를 복사하고 함수에 전달된다.Reference Type(참조 타입) (Array, Class Instance) 에서는 주소 값을 복사하고 함수에 전달. 값을 복사하고 전달하는 방식이기 때문에 Call by Value 방식이지만 주소 ..

백앤드/JAVA 2024.10.18

[JAVA] 컴파일 과정+JVM

1. [JAVA의 바이트 코드는 운영체제에 맞게 명령어를 변환해주는 JVM으로 인해 플랫폼(CPU 및 운영체제) 독립적이다]JAVA는  C/C++과 달리 하드웨어, 운영체제 상관없이 컴파일된 코드(바이트 코드)가 플랫폼 독립적이다.그이유는 JVM이라는 가상머신이 사용되기때문이다.JVM이 각 운영체제에 맞게 명령어를 변환해주기때문에 JAVA 바이트 코드는 플랫폼 독립적이다. 차이)JAVA->컴파일->바이트 코드-> JVM->모든 플랫폼 가능  반대로,C/C++->컴파일->네이티브코드 ->해당 플랫폼(CPU 및 운영체제)2. [JAVA 컴파일 과정]① 개발자가 .java 코드 작성 ② 자바 컴파일러(javac)가 자바 소스 컴파일해서 *바이트 코드(.class)로 변환 ③ 바이트 코드를 JVM의 클래스 로더..

백앤드/JAVA 2024.10.18