본문 바로가기

분류 전체보기

(122)
스레드 멀티스레드 사용이유 작업을 동시에 해서 더 빠르게 처리하기 위함 스레드 정의 방법 4개 ① //Runnable을 상속받아 run 메소드를 재정의 class BeepPrintImpl implements Runnable { @Override public void run() { for(int i=0; i call()로 해결!! -submit()를 통해 Collable인터페이스를 재정의 해서 call()함수를 불러 와 Future객체를 통해 call()함수가 리턴한 값을 읽어 올 수 있다. 컬렉션 자료구조 컬렉션 자료구조를 바탕으로 한 객체들을 추가, 삭제, 검색할 수 있는 인터페이스와 클래스 도구들이다. List 객체 추가 boolean add(E e) - 주어진 객체를 맨끝에 추가 void add(int i..
java.base 이어서 리플렉션 기존프로그램의 변경없이 완전히 동적인 코드를 짜기 위한 도구이다. Constructor 클래스 getConstructor() -> 생성자 정보를 얻어온다. newInstance() -> 객체 생성을 한다. getMethods() - > 객체 내에 어떤 함수가 있는지 함수명 리스트를 받아온다. Method 클래스 ->단점 : 존재하지 않는 함수에 대해서 오류를 말하지 않는다 Constructor의 getMethods()를 통해서 함수명이 존재하는지 확인해야한다. getMethod() - > 함수를 검색하는 메소드, if문을 통해서 함수가 있는지 확인하고 사용해야한다. invoke() - > 함수 호출을 하는 메소드, 함수를실행할때 필요한 객체정보와 함수에 대한 인자를 전달해 주어야한다. publi..
java.base 모듈 java.base는 모든 모듈이 의존하는 기본 모듈로 모듈 중 유일하게 requires하지 않아도 사용할 수 있다. Object 클래스 모든 클래스가 암시적으로 상속받는 최상위 클래스이다. object클래스가 가지고 있는 함수는 equals()와 hashCode(), toString()가 있는데 이를 오버라이딩해서 사용한다. --equals() public boolean equals(Object obj){ if(obj instanceof Member target){ if(id.equals(target.id)){ return true; } } return false; } --hashCode() public int hashCode(){ int hashCode = no + name.hashCode(); ret..
중첩클래스 이어서 라이브러리추가 파일 찾으러 폴더 열기 add external jar 중첩클래스의 바깥클래스 접근 인스턴스 멤버 클래스 - 바깥 클래스의 모든 필드와 메소드 정적 멤버 클래스 - 바깥 클래스의 정적 필드와 정적 메소드 바깥클래스의 객체를 얻으려면 바깥클래스이름.this 이렇게 써야한다. 중첩 인터페이스 UI프로그램에서 이벤트를 처리할 목적으로 많이 활용된다. static - Button객체 없이 ClickListener인터페이스를 사용가능 하다. public class Button{ public static interface ClickListener { void onClick(); } } 익명객체 이름이 없는 객체 익명 자식 객체 - 클래스를 상속해서 만듦 new 부모생성자(매개값,...){ } 익명 구현..
인터페이스 이어서 인터페이스 타입변환 인터페이스를 타입 변환할때 운좋으면 내가 원하는대로 자식객체로 캐스팅 되겠지만 운나쁘면 에러난다. 자식객체가 일치 하지 않는데 변경해야 할 수 있기 때문이다. 그래서 instanceof를 통해 확인해주어야 한다. 인터페이스 참조 변수를 통해 인터페이스에 추상클래스로 정의 되어있는 애들만 불러올 수있다. if( a instanceof C c){//인터페이스 a참조변수가 가리키고 있는 객체가 C클래스라면 바꿔주시오 } 인터페이스 다형성 인터페이스에 어떤 구현 객체가 담겼냐에 따라서 메소드 호출결과가 달라진다. --> 추상클래스랑 비슷 봉인된 인터페이스 무분별한 자식인터페이스 생성을 방지하기 위해 봉인된 인터페이스를 사용한다. sealed 인터페이스를 직접 상속 받는 인터페이스는 non-s..
상속 이어서 JVM 메모리 영역 - 추상메소드와 오버라이딩 부분 추상메소드를 통해 메모리를 절약하고, 오버라이딩으로 자식클래스에 선언된 메소드를 부모 참조변수를 통해 참조하는 과정 추상메소드가 메모리를 절약하는이유는 {}안의 내용이 메소드 영역에 올라가지 않고 단지 null을 가지기 때문이다. object클래스의 vfptr이라는 테이블에서 메소드와 주소를 연관지어 저장하고 있는데 컴파일러가 자식클래스를 스캔했을때 동일한 메소드가 있다면 그 메소드를 가리키는 주소값으로 변경해서 테이블에 저장한다. 만약 추상클래스가 부모클래스에 선언되어있다면 메소드 영역에서는 최소한의 공간을 차지하면서 테이블에만 연관된 주소를 저장하기 때문에 메모리를 절약할 수 있다. instanceof 부모변수를 통해서 자식을 참조하고 있을때 자식객..
은행계좌(생성,삭제,입금,출금,종료) 생코딩으로 적은 후 리팩토링을 거친 결과이다. run()함수를 만들면 main()함수에서 new BankApplication().run();만 써줘도 실행 가능하다. 계좌삭제시 여기서는 계좌의 순서번호가 상관 없으니까 로또 당첨 코드처럼 배열의 맨뒤의 객체를 삭제시킨 자리에 대입해주면 더 빨리 수행할 수 있다. 이코드랑 상관없지만 교수님이 시킨거 ● 자료구조 ● 배열 - list ● map(set) ● Tree import java.util.Scanner; class Account { private String number; //계좌번호 private String name; //이름 private int balance; //잔액 public Account(String number, String name,..
상속 상속 부모 클래스를 자식클래스가 상속받을 때는 extends를 사용한다. public class 자식클래스 extends 부모클래스{ } 자식클래스가 부모클래스를 상속받으면 생성자에서 부모의 기본 생성자를 부르는 코드를 자동으로 생성해준다. public 자식클래스(){ super(); } 이때 부모에 기본생성자가 없으면 에러가 발생하기 때문에 매개변수까지 넣어서 딱 불러주면 오류 없어진다. 부모에서 private로 선언된건 접근할 수 없지만 상속은 받는다. 부모에서 선언된 애들은 자식의 참조변수를 통해 필드와 메소드로 접근가능하다. 메소드 재정의(= 메소드 오버라이딩) --> 다형성을 위해서 오버라이딩 규칙 1. 부모 메소드의 선언부와 동일해야 한다. 2. 접근 제한을 더 강하게 오버라이딩할 수 없다. ..