Java 프로젝트를 컴파일하려면 jdk가 필요하다.컴퓨터가 java를 컴파일 하기 위한 javac를 찾을 수 있도록 환경변수를 설정해서 jdk의 위치를 지정해줘야 한다.컴퓨터한테 jdk 위치를 알려주는 과정..간단하지만 알아두면 앞으로 자주 쓸 것 같아서 기록해 둔다.이 글은 2024년 10월 14일, Windows 11 버전을 사용하는 환경에서 작성했다.0. jdk 설치우선 jdk를 설치해야 한다.여기선 C:\dev_files\jdk\openjdk-1.8에 위치한다는 것을 가정하고 설명한다.1. 시스템 환경변수 검색해서 "시스템 환경변수 편집"으로 들어가도 되고,제어판 - 시스템 - 고급 시스템 설정(시스템 속성) - 환경변수로 들어가도 된다.2-1. 시스템 변수 설정중요한 것은 jdk 위치이다.그런데..
깊은 복사 vs 얕은 복사 Java에서 객체를 복사할 때, 깊은 복사와 얕은 복사라는 개념이 있다. 간단하게 정리하자면 깊은 복사 : 실제 값을 새로운 메모리 공간에 복사하는 것이고, 얕은 복사 : 주소 값을 복사하는 것이다. 간단 예제 아래 예제를 통해 일단 간단히 알아보자. int[] original = new int[]{1,2,3}; int[] shallowCopy = original; //얕은 복사 int[] deepCopy = original.clone(); //깊은 복사 //주소 값 확인 System.out.println("주소-original = " + System.identityHashCode(original)); //주소-original = 191382150 System.out.print..
Java의 모든 객체는 Object 클래스를 상속받고 있다. Object 클래스는 객체의 동일성을 비교하기 위한 equals와 hashCode 메서드가 정의되어 있다. 따라서 Java의 모든 객체는 필요에 따라 equals와 hashCode를 재정의할 수 있다. equals() equals()는 두 객체의 값이 같은지 여부를 비교할 때 사용하는 메서드이다. 객체를 비교할 때 기본적으로 객체의 주소를 비교한다. public static void main(String[] args) { Car car1 = new Car(1111, "blue"); Car car2 = new Car(1111, "blue"); System.out.println(car1 == car2); //두 객체는 주소가 다르기 때문에 fals..
(운영체제) 프로세스 메모리 구조 일반적으로 프로세스의 메모리 구조는 아래의 4가지 영역으로 나눠진다. 스택(stack), 힙(heap), 데이터(data), 코드(text) 영역 stack과 heap 영역은 런타임 단계에서 메모리를 할당받는 동적 영역이고, data와 code 영역은 컴파일 단계에서 메모리를 할당받는 정적 영역이다. Stack : 임시 데이터 (함수 실행을 위한 지역 변수 등)가 저장된다. Heap : 코드에서 동적으로 만들어지는 데이터가 저장된다.(동적으로 할당된 데이터) data : 전역 변수, 초기화된 데이터 등 code : 프로그램 코드 JVM(Java Virtual Machine) Java의 특징 객체지향 프로그래밍 언어 기본 자료형(Primitive type : 원시 자료형)..
추상 클래스 상속을 하기 위해 만드는 클래스 구현 코드 없이 메서드의 선언만 있는 추상메서드를 포함한 클래스 반드시 하나 이상의 추상메서드를 포함해야 한다. abstract 예약어 사용 추상 클래스는 인스턴스화할 수 없음 ( 객체 생성 불가 ) (참고) 추상 클래스, 추상 메서드는 클래스 다이어그램에서 기울임체로 쓴다. 추상 메서드 자식 클래스에서 반드시 overriding 해야하는 메소드 선언한 하고 구현하지 않는다. abstract int methodA(int x, inty); //추상메서드 더보기 1) 메서드 선언 (declaration) : 반환타입, 메서드 이름, 매개변수로 구성 2) 메서드 정의(definition) : 구현부 { }를 가짐 abstract i..
상속 (Inheritance) 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능을 확장하여 구현한다. 기존의 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 상속을 이용함. 기본 문법 (Parent 클래스를 상속받은 Child 클래스) extends 키워드 뒤에는 단 하나의 클래스만 올 수 있음 (단일 상속) class Child extends Parent{ //필드 //메서드 } 상위 클래스 : 하위 클래스보다 더 일반적인 개념과 기능을 가짐 하위클래스 : 상위 클래스보다 더 구체적인 개념과 기능을 가짐 하위 클래스가 상위 클래스의 속성과 기능을 확장(extends) 자식클래스 Child에서는 부모클래스 Parent의 메서드와 멤버변수 등을 ..
static 키워드 : 공통으로 사용하는 변수가 필요한 경우 사용 여러 인스턴스가 공유하는 기준값이 필요한 경우 인스턴스가 생성될 때 만들어지는 변수가 아니고, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당 클래스 변수, 정적 변수라고 도 함 ( 인스턴스 변수 ) 인스턴스 생성과 상관없이 사용하므로 클래스 이름으로 직접 참조 1. static 변수 ex) 학생이 생성될때마다 학번을 1씩 증가시켜서 저장해 줌 public class Student { private static int studentNum=10000; private int studentName; private int studentID; // Student 객체를 생성할 때마다 studentNum++ 하여 studentID로 설정해준다. p..
1. 접근 제어 지시자(access modifier) 클래스 외부에서 클래스의 멤버변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드 public > default > protected > private public : 클래스의 외부 어디에서나 접근 가능 default : 같은 패키지 내부에서만 접근 가능 protected : 같은 패키지나 상속관계의 클래스에서 접근 가능 / 그 외에서는 접근 불가 private : 같은 클래스 내부에서만 접근가능 2. get() , set() 메서드 private으로 선언된 멤버 변수에는 접근할 수 없다. >> 접근, 수정할 수 있는 메서드를 public으로 제공 get() 메서드만 제공되는 경우 : read-only field 이클립스에서 [shift ..