Backend/Java
-
Java의 Compile Process 자바의 컴파일 과정Backend/Java 2022. 12. 28. 00:10
1. 개발자가 자바 소스코드(.java)를 작성 2. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상머신(JVM)이 이해할 수 있는 코드이다. 3. 컴파일된 바이트 코드를 JVM의 클래스로더(Class Loader)에게 전달 4. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area) 즉, JVM 메모리에 바이트 코드들을 올려줌 5. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행합니다. 이 때, 실행 엔진은 두 가지 방식이 있..
-
java final 의미, 사용법Backend/Java 2022. 12. 27. 23:53
Java에서 final은 "불변성"을 확보하기 위해 존재한다. 즉, 클래스나 변수 앞에 final을 붙이면 처음 정의된 상태가 변하지 않는 것을 보장한다. 4가지 경우에 대해 final을 사용할 수 있다. 1. final 변수 final String hello = "Hello world"; final 키워드가 붙은 변수는 초기화 후 변경할 수 없다. 다음과 같이 변경하려고 하면 컴파일 에러가 발생한다. final String hello = "Hello world"; hello = "See you around" // compile error! 2. final arguments (인자) final로 선언된 인자는 메소드 내에서 변경이 불가능하다. 따라서 다음과 같이 final int로 선언한 number는 ..
-
인터페이스 vs 추상클래스Backend/Java 2022. 11. 23. 14:53
추상클래스가 미완성 설계도라면 인터페이스는 기본 설계도라고 할 수 있다. 추상클래스는 일반 클래스와 별 다를 것이 없고 단지, 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스이다. 그래서 미완성 설계도라고도 표현한다. 추상 클래스는 트리 형식으로 상위 클래스와 하위 클래스로 나뉘어지는 트리 구조이다. 하위 클래스는 상위 클래스에서 추상화시킨 생성자 혹은 메서드를 정의하면서 더 구체화되어간다. 반면에, 인터페이스는 트리 구조와 같은 수직적 구조가 아닌 수평적 구조를 가지게 된다. interface 사용 예시 암호화 복호화 로직을 짠다고 생각해보자. 암호화/복호화 메서드를 가진 인터페이스 public interface Crypto { // 암호화 public String e..
-
객체지향 프로그래밍 정의, 장단점, 객체지향 프로그래밍 키워드Backend/Java 2022. 11. 15. 10:54
1. 객체지향 프로그래밍 정의 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 2. 객체지향 프로그래밍의 장단점 장점 코드 재사용이 용이 : 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있음 유지보수가 쉬움 : 절차지향 프로그래밍에서는 코드를 수정해야 할 때 일일이 찾아 수정해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 있기 때문에 해당 부분만 수정하면 됨. 대형 프로젝트에 적합 : 클래스 단위로 모듈화 시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러 명, 여러 회사에서 개발이 필요할 시 업무 분담 쉬움 단점 처리 속도..
-
객체지향프로그래밍 vs 절차지향프로그래밍Backend/Java 2022. 11. 15. 10:24
절차지향 프로그래밍 물이 위에서 아래로 흐르는 것처럼 순차적인 처리를 중요시하는 프로그래밍 기법이다. 대표적인 언어로 C언어가 있다. 컴퓨터의 처리구조와 유사해 실행속도가 빠르다. 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다. 객체지향 프로그래밍 실제 세계의 사물들을 객체로 모델링하여 개발을 진행하는 프로그래밍 기법이다. 대표적인 언어로 Java가 있다. 캡슐화, 상속, 다형성 등과 같은 기법을 이용할 수 있다. 절차지향 언어보다 실행속도가 느리다. 절차지향 -> 객체지향 프로그래밍의 패러다임 변화 컴퓨터 중심 프로그래밍 (컴퓨터가 사고하는대로 프로그래밍) ⬇ 인간 중심적 프로그래밍 (현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것)
-
overloading vs overriding 차이 오버로딩 vs 오버라이딩 차이Backend/Java 2022. 10. 31. 20:35
1. 오버로딩 같은 이름의 메서드(함수)를 여러개 가지면서 매개변수 유형과 개수가 다르도록 하는 것 class TestOverloading { //매개변수가 없는 sol 메서드 void sol() { System.out.println("매개변수가 없습니다"); } //매개변수가 int형 2개인 sol 메서드 void sol(int a, int b) { System.out.println("매개변수" + a + "와" + b); } //매개변수가 String형 1개인 sol 메서드 void sol(String c) { System.out.println("매개변수" + c); } } public class TestOverLoad { public static void main(String[] args) { Te..
-
int와 Integer 차이Backend/Java 2022. 10. 4. 20:59
일단 int는변수의 타입으로 primitive type(기본형) 중 하나이다. primitive type에는 위와 같은 종류들이 있다. Integer은Wrapper class의 하나이다. Wrapper class는 기본형을 객체로 다루기 위해서 사용하는 클래스이다. 모든 기본 형은 Wrapper class를 생성할 수 있고 종류는 아래와 같다. 기본형을 언제 객체로 다룰 때 주로 쓸까를 생각해보면 1. 기본형 값이 아닌 객체로 저장해야할 때 2. 객체 간 비교가 필요할 때 3. 매개변수로 객체를 필요로 할 때 가 있을 수 있다. 또한 나의 경우 현업에서 언제 질문을 받았냐면, Repository에서 받아오는 데이터가 숫자의 형태였고 아무생각없이 Integer를 선언해서 받아왔다. 사수님이 왜 int가 아..