7. 23

바르고·2023년 7월 23일
0

절대값 => Math.abs()

// 최대공약수, 재귀.
public static int GCD(int a, int b){
        if(a==b)
            return a;

        if(a<b){
            int tmp = a;
            a = b;
            b = tmp;
        }

        if(a%b == 0){
            return b;
        } else{
            return (GCD(b,a%b));
        }
    }

과목평가 키워드

1. 데이터 타입과 형변환, 연산자

변수, Variable

기본형, primitive type
참조형, reference type

논리형 boolean 
정수형 byte, short, int(default), long
실수형 float, double(default)
문자형 char

byte는 맨 앞이 부호 비트, sign bit 라 2^7 범위만 표현 가능

Wrapper class => Integer, Character 빼고 앞 글자만 대문자로
  - 기본 타입의 데이터를 객체로 취급해야 할 때.
  
-----

형 변환, type casting
  - primitive 끼리 reference 끼리 변환 가능
  - boolean은 다른 기본 형과 변환 안 됨.
  - (자료형) 을 앞에 붙여서
  
묵시적 형 변환.
  -, 타입의 크기가 아닌 타입의 표현 범위가 커지는 방향으로 할당할 경우.
  - byte => short, char => int => long => float => double
  - char, short는 호환 X, char은 음수쪽이 없고 양수 쪽이 더 크기 때문 (unsigned, signed)
  
명시적 형 변환
  - 값 손실이 발생할 수 있어 프로그래머가 책임져야함.
  
-----

연산자
  - 우선 순위 및 결합 방향 생각.
  - 산술 이항 연산 전 피연산자의 타입을 일치 시킴.
  - 피연산자의 크기가 4byte 미만이면 int로 변경한 후 연산 진행.
  - 두 개의 피연산자 중 큰 타입으로 형 변환 후 연산 진행.

---

2. 조건문 
switch
  - break 안 걸면 끝까지 감.

---

배열
배열이란
  - 동일한 타입의 데이터 0개 이상을
  - 연속된 메모리에서 관리하는 것

  - 생성
    - new 키워드와 함께 데이터 타입 및 길이 지정
    - 메모리의 연속된 공간 차지 => 크기 변경 불가
    - type에 대한 default 초기화
    - 배열 변수 이름은 그저 주소값만. 객체를 생성한 건 아님.
    - 참조형 변수 기본형은 => null..

Char로 된 숫자를 계산하기
  - char - '0' 또는 48
  -'A' => 65, 'a' => 97, '0' => 48
  - char => int 묵시적 형 변환.

Arrays.toString();
String.charAt();
String.toCharArray();

선언과 생성을 따로 처리할 경우 초기화 주의
int [] arr;
arr = {1,3,5,6,8}; // 컴파일 오류
int [] arr = new int {1,3,5,6,8}; // OK

for-each 배열 (항상된 for)
for( int x : intArray){
	###
}
naturally read only(copied value)
 - 인덱스 관리도 안 하고 변경도 안 되기에 빠름.
 
Array is Immutable
  - 배열은 최초 메모리 할당 이후, 변경할 수 없음.

int[] arr = new int[] {1,2,3};
 - 배열 중괄호로 선언 시 []안에 배열의 길이 쓰면 안 됨.

int[] arr;
arr = {1,2,3} // X, 앞에 new int[] 빼먹으면 안 됨.

System.arraycopy(src, srcPos, dest, destPos, length);
  - C 아님 c 임. 개발자 실수?

Arrays.copyOf(int[] original, int newLength);

new int[5][]; // OK, 나중에 할당해도 됨. 이래서 행마다 열의 길이를 다르게 할 수 있음.

-----

객체지향

OOP, Object Oriented Programming
  - 모든 걸 객체로 보는 건 아님. 지향할 뿐.

장점
  - 블록 형태의 모듈화 된 프로그래밍
    - 신뢰성 높은 프로그래밍
    - 추가 / 수정 / 삭제가 용이
    - 재 사용성이 높음

현실세계 => (추상화) => 프로그래밍 => (구체화, 객체화) => 객체

---

JVM의 메모리 구조
  - metaspace
    - 클래스 정보 철
      - 타입 정보
      - Field
      - Method
  - stack
    - 메서드들의 실행 공간
      - thread 별로 별도 관리
      - 메서드 호출 시 마다 메서드 프레임 적충
      - 메서드 프레임에 로컬변수도 쌓이는 구조
  - heap
    - 객체를 저장하기 위한 영역
      - thread에 의해 공유
      - 객체가 생성되고 Garvage Collector에 의해 정리됨.

----- 

변수
  - 타입에 따른 분류 : primitive, reference
  - 선언 위치에 따른 분류
    - 멤버 변수 : 클래스 멤버 변수, (인스턴스) 멤버 변수
    - 지역 변수 : 지역 변수, 파라미터 변수

자세한 내용은 따로 보기.

-----

메서드
  - 현실의 객체가 하는 동작을 프로그래밍 화.
  - 어떤 작업을 수행하는 명령문의 집합
  - 반복적으로 사용되는 코드의 중복 방지

Variable arguments
  - variableArgs( int... params)
  - 메서드 선언 시 동일타입의 몇 개의 인자가 올 지 예상 못 할 때
  
스택, stack
  - First in Last out
  - 메서드 호출 시 스택에 쌓임.
  
메서드 호출 시 파라미터로 입력된 값을 복사! 해서 전달
  - call by value

-----

3. 생성자

생성자
  - 객체를 생성할 때 호출하는 메서드 비슷한 것

기본 생성자
파라미터가 있는 생성자
  - 를 만들면 기본 생성자는 추가되지 않는다! (주의)

this
  - 참조 변수로서 객체 자신을 가리킴
  - 객체에 대한 참조, 따라서 static 영역에서 this 사용 불가
  - 메서드와 마찬가지로 생성자도 오버로딩 가능
  - 반 드 시 첫 줄에서만 호출가능

italic 글씨체 => static
  - ex) System.out.println(); 에서 out 이 이탤릭
  
-----


상속, Inheritance
  - 상위 클래스의 자산을 자식 클래스에서 재사용하기 위한 것.
  - extends 키워드 사용

Object 클래스
  - 모든 클래스의 조상 클래스

단일 상속, Single Inheritance
  - 만 지원한다 자바는. 다중 상속은 관계가 복잡..
  - 대신 interface와 포함 관계(has a)로 단점 극복

상속 이냐 포함이냐 그것이 문제로다
  - 문법적 문제가 아닌 프로젝트의 관점 문제
  
-----

메서드 오버라이딩, overriding
  - 조상 클래스에 정의된 메서드를 자식 클래스에서 적합하게 수정하는 것
  
super 키워드
  - 조상 클래스 멤버 접근.
  - 변수의 scope
    - 사용된 위치에서 점점 확장해가며 처음 만난 선언부에 연결됨
    - method 내부 => 해당 클래스 멤버 변수 => 조상 클래스 멤버 변수
  - super 또한 자식 클래스 생정자의 맨 첫 줄에서만 호출 가능
    - this 또는 super
  - 명시적으로 호출하지 않는 경우 컴파일러가 super() 삽입.

Annotation
  - 컴파일러, JVM, 프레임워크 등이 보는 주석
  - 소스코드에 메타 데이터를 삽입
 
JDK 1.5 기본 annotation
  - @Deprecated
  - @Override
  - @Suppr
  
Package
  - 프로그램의 많은 클래스 => 패키지로 묶음
  - 모든 클래스는 반드시 하나의 패키지에 속한다

Import 
  - 다른 패키지에 선언된  클래스를 사용하기 위한 키워드
  - default import package
    - java.lang.*
    
-----

제한자, modifier
  - 클래스, 변수, 메서드 선언부에 함께 사용되어 부가적인 의미 부여.
  - 종류
    - 접근 제한자 : public, protected, (default = package), private
    - 그 외 제한자
      - static, final ...
  - 접근 제한자는 하나만 가능.
  - 순서는 무관하나 일반적으로 접근제한자 먼저
  
final 
  - 더 이상 바뀔 수 없음.
  - blank final
    - 값이 할당되지 않은 멤버 변수
    - 객체가 생성되면 변경 기회가 없기에 반드시 생성자에서 1회 초기화 가능
  - static final 
    - 진정한 상수는 객체와 무관하게 모두가 공용하는 값. pi, E...
 
-----

Singleton
  - 객체를 딱 하나. 만들어야 할 경우
    - 여러 개의 객체가 굳이 필요없는 경우
      - 객체를 구별할 필요 없는 경우
    - 객체 생성 / 삭제의 비용이 클 때
  - 생성자 private
  - static 붙이기

class Singleton{
	//멤버 변수
	private static Singleton sc = new Singleton();

	public static Singleton getInstance(){
    	return sc;
    }
    
    // 외부에서 sc를 넣을 수 없음..
    public void setInstance(Singleton sc){
    	this.sc = sc
    }
    
	private Singleton(){
    	//100만원!
    }
}


주관식 문제 중에..
extends
java.lang.Object // 반드시 O 대문자
instanceof

오버로드
  - 개수 / 순서 / 타입 중 하나만 다르면 됨
  
오버라이딩
  - 파라메타 개수가 같음.

-----

데이터 은닉과 보호, Encapsulation
  - 변수는 private 접근으로 막기
  - setter / getter 를 통한 접근

-----

다형성, Polymorphism
  - 하나의 객체가 많은 형을 가질 수 있는 성질
  - 

profile
바르고의 다락방

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기