절대값 => 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};
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}
System.arraycopy(src, srcPos, dest, destPos, length);
- C 아님 c 임. 개발자 실수?
Arrays.copyOf(int[] original, int newLength);
new int[5][];
-----
객체지향
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;
}
public void setInstance(Singleton sc){
this.sc = sc
}
private Singleton(){
}
}
주관식 문제 중에..
extends
java.lang.Object
instanceof
오버로드
- 개수 / 순서 / 타입 중 하나만 다르면 됨
오버라이딩
- 파라메타 개수가 같음.
-----
데이터 은닉과 보호, Encapsulation
- 변수는 private 접근으로 막기
- setter / getter 를 통한 접근
-----
다형성, Polymorphism
- 하나의 객체가 많은 형을 가질 수 있는 성질
-
좋은 글 감사합니다. 자주 올게요 :)