간단 용어 및 문법 정리
Java 정리
- 객체 생성
- C p = new C() 로 객체를 생성 후
- C q 와 같이 빈 객체를 만들기만 하고 new를 해서 객체를 생성하지 않은 상태로
- q = p 를 수행하게 된다면
- p 안에 있던 기존 값들을 깊은 복사로 완전한 복사를 하는것이 아니라
- 같은 주소값을 가지게 하는 것으로 임의의 주소값 100번지를 서로 똑같이 가지게 된다는 의미를 가진다.
- this
- ex) set(int a) {this.a = a} 의 경우에 this를 사용한 이유는
- 파라미터 값과 기존 a와 구분하기 위함
- ex) set(int a) {this.a = a} 의 경우에 this를 사용한 이유는
- 생성자
- 클래스명과 클래스 내의 클래스와 같은 이름의 메서드가 있다면 생성자가 된다.
- ex) Class Ref{ int a Ref(int x) {a = x} }
- 접근 지정자
- Private: 클래스 내부만
- Protected: 클래스, 패키지(폴더), 상속의 경우만
- Public: 어디에서든 가능
- default: 패키지 내부에서만 가능
- 접근 지정자 문법 오류
- private
- Person 클래스의 name은 private 접근 지정자로 지정되어있는데
- main 함수에서
- Person으로 만든 객체 p 가 있는데
- p.name = ‘치치’ 라고 하게 되면 private 접근 지정자로 지정한 name이기에 문법 오류가 발생하게 된다.
- 그래서 public으로 접근 가능한 setName과 같은 메서드를 통해 해당 private 인 name을 변경할 수 있다.
- private
- toString()
- Java의 최상단 객체 내부에 toString() 이라는 메서드가 있는데
- 문제에서 toString() 이 나왔다고 하면 해당 메서드를 오버라이딩하는것이라고 볼 수 있다고 한다.
- 문법
- class CS extends C{} 라고 하면
- CS가 C를 상속 받은 것이 된다.
- class CI extends C implements I {} 라고 하면
- CI는 C를 상속 받고 I로부터 구현한다 라고 볼 수 있다.
- class CS extends C{} 라고 하면
- 생성자
- 아버지가 날 나은 형태의 클래스의 경우
- 무조건 아버지부터 실행을 하게 된다.
- 그리고 명시적으로 호출을 하게 하는 super() 메서드가 있다.
- super() 가 없다면 묵시적으로 부모 클래스와 같은 이름의 메서드를 가진 default 생성자를 호출하게 된다.
- 또한 this() 를 하게 되면 본인의 default 생성자를 호출하게 된다.
- 아버지가 날 나은 형태의 클래스의 경우
- 오버로딩
- a.cal(24.8,5.1) 의 경우 아래와 같이 여러개의 오버로딩 상황의 경우엔 일단 소수의 경우엔 double을 사용한다고 한다.
- public float cal(float a, float b) {return a-b}
- public double cal(double a, double b) {return a+b}
- 하이딩 개념
- class B extends A 를 통해 B는 A를 상속받는 상황이고 A,B 둘 다 static void f() 라고 하는 똑같은 메서드를 가지고 있을 때
- A a = new B() 를 통해 객체를 생성하고
- a.f() 를 했을 경우 현재 객체를 생성 시 A(아버지)로부터 B(자식)을 생성했기에 또 static 한 메서드를 실행 시킬 경우엔 오버라이딩이 아닌 하이딩 개념이라고 한다.
- 그래서 객체를 생성 시켰을 때 생성 시킨 쪽의 static 한 메서드를 사용해야해서 위의 경우엔 A가 가지고 있는 f() 메서드를 사용하게 된다.
- 그리고
- B만 가지고 있는 c() 메서드가 있을 경우 현재 a.c() 를 호출하게 되면 오류가 발생한다고 한다.
- 이유는 A로부터 생성을 했는데 A는 해당 c() 라고하는 메서드를 가지고 있지 않기 때문!
- 오버라이딩
- 위의 하이딩의 코드에서 이제 A와 B 모두 void g() 메서드가 있을 경우
- a.g() 라고 호출을 했을 때는 해당 g() 메서드의 경우엔 static이 아니기에 오버라이딩으로 B가 재정의한 g() 메서드를 호출하게 된다.
- 추상클래스
- 추상클래스는 객체를 생성할 수 없다.
- ex) 추상 클래스인 Shape 이 있을 경우
- Shape s
- s = new Shape() ← 와 같이 작성하게 되면 오류가 발생하게 된다.
- 지역변수
- public static void main() 안에서 생성된
- int a = 3 의 경우엔 다른 함수에서는 사용하지 못하는 지역변수가 된다.
- public static void main() 안에서 생성된
- 예외처리
- try 구문에서 실행 되다가 에러가 발생하게 되면
- catch 문으로 넘어가게 되고
- catch 문을 모두 수행하고 나면 다시 try 구문으로 돌아오는 것이 아니라
- finally 문으로 이동하게 된다.
- 즉, finally 는 무조건 수행해야한다.
- 없다면 수행하지 않는다.
- throw new Exception()
- 해당 구문을 수행하게 되면 해당 구문 내의 catch 문으로 이동하게 된다.
- throw ??
- catch 구문 내에서 throw 가 한번 더 있다고 하면 해당 메서드를 호출한 곳에서 예외처리를 추가로 더 해달라는 의미가 된다.
- 물론 해당 구문 내의 finally까지 처리하고 넘어가야 한다.
- catch 구문 내에서 throw 가 한번 더 있다고 하면 해당 메서드를 호출한 곳에서 예외처리를 추가로 더 해달라는 의미가 된다.
- equals vs ==
- 같은 요소를 가진 v1, v2가 각자 따로 생성되어 있어서 서로 다른 주소값을 가지고 있는 상황
- v1.equals(v2) 라고 할 경우
- v1과 v2는 서로 같은 하위 내용을 가지고 있는지 물어보는 것이어서
- 결과는 true
- v1 == v2 라고 할 경우
- 서로 다른 주소값을 가지고 있는 것이어서
- 결과는 false가 된다.
- removeLast()
- python 의 pop() 과 유사함
- 정적 변수
- Student 라고 하는 하나의 클래스를 가지고 4개의 객체를 생성했을 때
- 생성자로 static 한 변수 cnt를 1씩 증가시키는 문제인데
- 생성된 객체로는 m1, m2, m3, m4 이렇게 4개가 있고 생성자로 인해 cnt ++ 를 총 4번 해서 static한 cnt는 현재 4가 되는데
- 나는 생성 될 때의 cnt 값을 각각의 객체에 부여해서
- m1은 cnt = 1, m2는 cnt = 2 … m4는 cnt = 4 이렇게 되는 줄 알았는데
- static 변수는 계속 같은 값을 가지게 되어서 m1, m2, m3, m4 모두 같은 cnt 값인 4를 가지게 된다
- 또한 static한 변수를 밖에서 사용하고자 할 경우
- 클래스명.static 변수명 을 작성하면 된다
- 그래서 Student.cnt를 하게 되면 4를 가져올 수 있게 된다.
- Student 라고 하는 하나의 클래스를 가지고 4개의 객체를 생성했을 때
- 문법
- 앞의 출력문이 문자열이면 뒤에 나오는 출력문 또한 문자로 출력을 하게 된다.
- ex) 3+4+”a”+3+4 의 경우
- 앞의 3+4는 숫자이기에 7로 되고 이후에 a부터는 문자로 취급해서
- 결과는 7a34로 출력하게 된다.
- 문법2
- 객체를 생성하지 않은 상태에서 메서드를 사용하려고 한다면 static을 붙여줘야 한다.
- ex) System.out.print(check(1))
- (ㄱ) String check(int num){}
- 현재 객체를 생성하지 않고 메서드를 실행하려고 하기 때문에
- (ㄱ)에는 static을 추가해줘야 한다.
- 객체를 생성하지 않은 상태에서 메서드를 사용하려고 한다면 static을 붙여줘야 한다.
- substring(x,y)
- substring의 첫 번째 인자는 해당 위치 인덱스부터
- 두 번째 인자 전까지 출력하라는 의미가 된다.
- 즉, [x:y] 슬라이싱 하라는 의미가 된다.
- indexOf(x)
- indexOf는 () 안의 값인 x 의 첫 번째 인덱스를 조회하는 메서드가 된다.
- Integer.toString()
- integer 를 string 형태로 저장하겠다는 의미가 됨.
- try 구문에서 실행 되다가 에러가 발생하게 되면
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 계산식 (1) - 서브넷 마스크, 페이지 교체 알고리즘 (0) | 2023.07.15 |
---|---|
[정보처리기사] 서브넷 마스크, 서브넷 계산 (0) | 2023.07.14 |
[정보처리기사] 신기술 용어 정리 (0) | 2023.07.12 |
[정보처리기사] C 언어 정리 (0) | 2023.07.12 |
[정보처리기사] 정보 보안 (2) (0) | 2023.07.11 |