OOP & JAVA
-
[JAVA] 깊은복사 (clone , 복사 생성자)OOP & JAVA 2021. 12. 18. 22:22
1. 깊은 복사 vs 얕은복사 얕은 복사는 단순히 객체를 복사하는 것을 의미한다. 객체 자체를 복사했기때문에 모체인 p의 맴버변수가 수정되면 p2의 맴버 변수값 또한 바뀌게 된다. p2 는 그냥 힙에 있는 p의 값을 가리키고 있을 뿐이다. Person p = new Person(); Person p2 = p; p.setAge = 10; println(p2.getAge()) // 10 객체가 아닌 원시타입의 변수는 다음 처럼 대입하더라도 그 메모리가 힙에 생성되는 것이 아니기 때문에 자연스럽게 깊은 복사가 이루어진다. 그러나 객체나 배열에 대해서 독립적으로 복사해서 사용하는 깊은 복사를 사용하려면 뒤에 나올 두 방법을 사용하여 구현할 수 있다. 2. clone 을 통한 깊은복사 구현 clone 메서드를 오..
-
[JAVA] 예외처리 및 예시(결제 시스템)OOP & JAVA 2021. 12. 4. 22:07
기본적인 예외처리 방법과 함께 예외처리로 구현한 결제 시스템 예시를 정리해 보았습니다. 1. try / catch / finally 문 에러가 발생할 경우 직접 에러를 해결하는 방법이다. try 에서 에러가 발생했을 경우 catch에 명시된 에러의 종류일 경우 이를 받아 처리할 수 있다. 예외 상속도 에 따라 상위 에러일 경우 하위 에러를 받아서 처리합니다. 해당 예외를 받는 catch 블럭이 없을 경우 스택 블럭을 타고 내려가면서 해당 에러를 처리할 수 있는 catch 블럭을 찾습니다. 메인 함수까지 올라가서 에러를 캐치하지 않으면 에러가 터져 프로그램이 종료합니다. try{ //예외가 발생할 수 있는 코드 } catch(에러클래스1 에러변수1){ // 처리 코드 } catch(애러클래스2 에러변수2)..
-
[JAVA] 컴포지션 vs 상속OOP & JAVA 2021. 11. 1. 17:39
클래스 설계시 상속으로 구현할지 컴포지션으로 구현할지 고민하다 이 부분을 공부해보았는데 생각보다 다양한 관점이 존재해서 한번 정리해보려고합니다. 보통 상속으로 구현한 부분은 컴포지션으로도 구현이 가능하고 반대로 상속으로 구현한부분은 컴포지션으로도 구현 가능합니다. 그렇다면 어떤 기준으로 상속과 컴포지션을 결정해야할까요? 컴포지션이란? 한 클래스가 다른 클래스를 포함하고 있는 경우를 말합니다. 아래 코드에서 Car 클래스는 Engin 클래스 타입의 맴버변수를 가짐으로서 Engin 은 Car의 컴포지션으로 볼 수 있습니다. public class Car { int price; Engin engin; String color; public Car(int price, Engin engin, String color..
-
[ JAVA ] String , StringBuffer , StringBuilder 차이OOP & JAVA 2021. 9. 22. 17:56
개발중 재귀적으로 String 을 클래스를 사용하던중 오류와 마주했고 StringBuilder를 통해 해결했습니다. 여기에 StringBuffer 또한 추가해서 정리해보겠습니다. 1. String 과 StringBuffer/StringBuiler 간의 차이 String 과 나머지 두 클래스를 구분짓는 가장 큰 차이는 String 이 immutable(불변) 클래스 라는 것입니다. 그리고 StringBuffer/StringBuiler 는 mutable 객체를 생성합니다. 앞의 immutable 과 mutable 은 많은 분들이 파이썬의 리스트와 튜플과 같은 자료구조를 공부하면서 접해보셨을 수 있습니다. 쉽게 말해서 해당 자료형을 사용하는 객체가 수정되었을때 mutable 객체는 값이 수정되고 immutab..
-
Java 메모리 관리OOP & JAVA 2021. 9. 12. 16:55
개요 자바의 메모리 영역에 대해 알아본다 실제 코드들을 통해 어떤 메모리에 올라갈지를 생각해본다. 우리가 짠 코드들이 실제로 java 안에서 어떻게 동작하고 어떤 메모리 공간에 저장되는지 정리해보려고 합니다. 자바는 .java 파일이 컴파일 되어 .class 파일이라는 바이트 코드를 생성하고 이 파일을 JVM 이 구동 시킵니다. 컴파일과 JVM의 거시적인 역할에 대한 부분도 다음에 정리해보겠습니다 . 오늘은 오직 JVM 그중에서도 내 코드의 데이터들이 어디에 저장되는지 집중하고자 stack 과 heap에 집중해서 공부해보겠습니다 . Static area ( == Method area) .class 파일의 바이트 코드가 로드되는 곳 클래스정보(멤버변수의 이름), 변수정보(데이터타입, 접근제어자정보), 메소..
-
커맨드에서 jar file 실행하기(feat. class path)OOP & JAVA 2021. 8. 19. 19:34
우분투 환경에서 jdbc를 이용하기 위해 .jar 파일을 열어야 했고 class path를 설정하는 과정에서 꽤나 삽질을 했다. 참고 ) class path 설정에는 환경변수를 설정하는등 다양한 방법이 있으므로 아래 방법은 참고만해주세요 이때 중요사항 "."은 꼭있어야 함. 구분자는 윈도우의 경우 ";"이고 unix 계열은 ":" 입니다. 위와 같은 구분자는 본인의 디렉토리를 말한다. (지정 classpath찾고 없으면 본인 디렉토리도 찾고 : 보통 main이 포함된 class 파일은 본인디렉토리에 있기때문에 필수로 넣어줘야함) classpath란? -cp 즉 클래스패스를 설정해주는것은 .java파일을 컴파일한 .class 파일을 실행할때 그안에 필요한 내용들을 해당 클래스패스에서 찾으라는 명령어이다. ..
-
자바기초 4 [쓰레드 & 쓰레드 풀 ]OOP & JAVA 2021. 6. 30. 18:30
1. 프로세스와 쓰레드 운영체제는 여러 프로세스[어플리케이션]을 동작시키고 프로세스는 여러 쓰레드를 운영한다 프로세스간은 독립적이지만 쓰레드는 프로세스 단위로 묶여있기 때문에 쓰레드의 오류는 어플리케이션의 비정상적 종료를 유도 할 수 있다. 쓰레드들은 cpu 스케줄러에 의해 실행 순서가 정해지고 run코드의 부분 부분이 실행된다. 부분 부분이 실행되는 과정에서 실행상태와 대기상태를 오가며 마침내 종료된다. 프로세스와 쓰레드의 자세한 설명 https://easycodediary.tistory.com/56?category=924225 [ 운영체제 ] 5. 스레드 와 프로세스 프로세스 : 프로그램을 메모리 상에서 실행중인 작업 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위 1. 프로세스와 스레드의 차이 ..
-
[JAVA Collection 1] ArrayList 와 LinkedList 의 차이OOP & JAVA 2021. 6. 3. 16:33
1. Collection 구조 List 인터페이스 구현체로는 ArrayList , Vector , Stack 이 있다, LinkedList 는 List 인터페이스와 Queue 인터페이스를 구현한 Deque 인터페이스의 구현체이다. 2. ArrayList 란? 중복을 허용한다 순서를 유지하며 인덱스로 원소를 관리한다 배열과 다르게 그 용량이 정해져있지 않다 List 인터페이스 만을 구현하는 ArrayLsit 는 내부적으로 자료를 배열 형태로 저장합니다. 배열과의 차이로는 배열은 최초 생성시 용량이 정해져있는데 반해 ArrayList는 크기가 가변적이라는 것입니다. 사실 ArrayList 도 내부적으로는 생성시 최대 용량이 정해져있고(10으로 고정) 해당 용량을 초과할시 새로운 배열로 옮기게 되어 있습니다...