캡슐화 public class Animal { public void move() { System.out.println("움직입니다."); } } public class Bird extends Animal { @Override public void move() { System.out.println("날아갑니다."); } } 객체의 속성과 메서드를 하나의 단위로 묶고, 외부에서 직접 접근하지 못하도록 보호하는것. 이를 통해 객체의 내부 구조를 숨길 수 있으며, 객체간의 상호작용은 객체의 인터페이스를 통해서만 가능 연관있는 메소드를 모아서 응집도를 높이고, 연관있는데 메소드를 모음 상속 부모 클래스가 가진 속성과 메서드를 자식 클래스가 물려받는것. 이를 통해 자식 클래스는 부모 클래스의 기능을 확장하거나 수정..
- public: main() 메서드가 외부에서 접근 가능한 접근 제어자(public)를 가지고 있음을 나타냅니다. - static: main() 메서드가 정적(static) 메서드임을 나타냅니다. 따라서, 객체를 생성하지 않고도 클래스 이름으로 직접 접근할 수 있습니다. - void: main() 메서드가 반환하는 값이 없음(void)을 나타냅니다. - main: Java 프로그램의 시작점이 되는 메서드 이름입니다. - String[] args: main() 메서드의 매개변수로, 프로그램 실행 시 전달받은 인자들을 문자열 배열(String[]) 형태로 전달받습니다. 이를 통해, 프로그램의 동작을 유연하게 조정할 수 있습니다. 예를 들어, 윈도우 운영체제에서 명령 프롬프트(cmd) 창을 열고 "java ..
Java 프로그램의 컴파일 및 실행 과정은 크게 두 단계로 나눌 수 있습니다. 첫 번째 단계는 소스 코드를 컴파일하여 바이트 코드(Bytecode)로 변환하는 단계이며, 두 번째 단계는 JVM(Java Virtual Machine)에서 바이트 코드를 실행하는 단계입니다. 각 단계는 아래와 같습니다. 1. 소스 코드 작성 자바 프로그램은 텍스트 파일 형태로 작성되며, .java 확장자를 가집니다. 소스 코드는 텍스트 에디터를 사용하여 작성할 수 있습니다. 2. 컴파일 자바 컴파일러(javac)를 사용하여 소스 코드를 바이트 코드로 변환합니다. 변환된 바이트 코드는 .class 확장자를 가집니다. 3. 클래스 로딩 JVM은 실행할 클래스를 찾아서 메모리에 로딩합니다. 이때, 클래스 파일의 정보를 저장하는 메..
Static 멤버와 Non-Static 멤버의 차이 staitc 멤버 non-static 멤버 From 클래스에 속하는 멤버 객체에 속하는 멤버 초기화 시점 클래스가 로딩될 때 초기화되며, 프로그램 종료까지 메모리에 유지 객체가 생성될 때 초기화되며, 객체가 삭제될 때까지 메모리에 유지 생성 타이밍 클래스를 로딩할 때 생성되며, 클래스의 인스턴스를 생성하지 않고도 사용 O 클래스의 인스턴스를 생성해야 사용 Value 클래스마다 공유되는 값 객체마다 다른 값 용도 유틸리티 메서드 등을 표현, 상수 값을 저장하는 데 사용 객체의 상태를 표현,객체 간의 관계를 나타내는 데 사용 ex 데이터베이스의 연결 정보나, 프로그램에서 공유해야 할 상수 값 학생 객체를 생성하면서 학생의 이름, 학번, 성적 등의 정보 St..
HashMap, HashTable, ConcurrentHashMap,LinkedHashMap 차이 HashMap 데이터를 저장할 때 키-값 쌍으로 저장하며, 키는 중복되지 않으며 null을 허용합니다. 값은 중복되어도 상관없으며, null도 허용합니다. HashMap은 동기화가 되어있지 않기 때문에 멀티스레드 환경에서 사용할 때는 주의가 필요 HashMap은 여러 쓰레드가 동시접근할경우 생기는 문제점 HashMap은 여러 스레드가 동시에 접근할 경우, 데이터 일관성 문제가 발생할 수 있습니다. 이는 다음과 같은 상황에서 발생할 수 있습니다. 해시 충돌이 발생하는 경우, 같은 인덱스에 여러 데이터가 중복되어 저장될 수 있습니다. 이 때는 링크드 리스트를 이용하여 데이터를 추가로 연결하는데, 데이터가 많이 ..
캡슐화 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호 추상화 선언만있고 구현내용이 없거나, 일부만 구현한 미완성 클래스. 다형성(polymorphism) 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체지향의 특성 *다형성을 극대화 하기 위해 추상클래스나 인터페이스를 이용한다. - 오버라이딩 : 상위클래스의 메소드와 같은 이름,반환형,인자는 같아야 하지만 함수 내부 내용은 달라도 된다. //상위 클래스 public int add (int a, int b) { return a + b; } //하위 클래스 public int add (int a, int b) { return a * b; } - 오버로딩: 메소드 이름만 같고 반환형,파라미터의 개수가 ..
인터페이스란? 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다. 인터페이스의 객체지향 특징? 다형성 : 한 가지 타입으로 여러가지 구현체를 사용할 수 있는 것이다. -> 유지보수의 편의를 ex. 한 카페에서 여러 음료를 시킬수있다. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능 예시 *기존 public class Americano { public String coffeeName() { return "americano"; } } public class Cafe { private Americano coffee; public void makeCoffee(Americano coffe..
람다란 무엇인가? 메소드로 전달할 수 있는 익명 함수를 단순화한것이라고 할 수 있다. 람다예제 불리언 표현식 (Listlist) -> list.isEmpty() 객체 생성 () -> new Apple(10) 객체에서 소비 (Apple a) -> {System.out.println(a.getWeight());} 객체에서 선택/추출 (String s) -> s.length() 두 값을 조합 (int a, int b) ->a*b 두 객체 비교 (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) 기존 Comparator byWeight = new Comparator(){ public int compare(Apple a1, Apple a2){ ret..
StringTokenizer StringTokenizer 클래스는 문자열을 우리가 지정한 구분자로 문자열을 쪼개주는 클래스입니다. 그렇게 쪼개어진 문자열을 우리는 토큰(token)이라고 부릅니다. String : 문자열을 Tokenizer : 토큰화한다. 이렇게 해석할 수 있는데요, 즉 토큰은 분리된 문자열 조각으로, 스트링토크나이저 클래스는 하나의 문자열을 여러 개의 토큰으로 분리하는 클래스인거죠. StringTokenizer 작동 방식 StringTokenizer의 인스턴스는 returnDelims Flag가 가지고 있는 true 혹은 false에 따라 토큰을 분리할지 정합니다. - 만약 false일 경우 한 문장을 각 연속된 문자로 빈칸에 따라(혹은 기에 따라) 여러 토큰으로 분리합니다. - 만약 ..
JVM 구조 .java파일 → 컴파일 → .class(바이트 코드) 파일 생성 이렇게 생성된 .class파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리 영역인 Runtime Data Area로 적재하는 역할을 한다. - linking - Verify 바이트 코드 검증 기는 생성된 바이트 코드가 올바른지 여부를 검증하게 된다. 검증이 실패하면 검증 오류가 발생한다. - Prepare 모든 정적 변수에 대해 메모리가 할당되고 기본값이 지정된다. - Resolve 모든 기호 메모리 참조가 메서드 영역의 원래 참조로 바뀐다. - initialization: 클래스 로딩의 마지막 단계로 여기서 모든 staic 변수는 원래 값으로 지정되고 static 블록이 실행된다. JVM 탄생배경 printf("hi")..