본문 바로가기

분류 전체보기

(146)
Java- Object 클래스 모든 클래스는 Object 클래스를 상속한다. 클래스를 정의시 어떠한 클래스도 상속하지 않는다면 해당 클래스는 Object 클래스를 상속하게 된다. 예를들어... class AAA{} ..(1) class AAA extends Objects{} ..(2) (1)과 (2)는 동일하다. 그리고 다른 클래스를 상속받는 서브클래스들도 부모 클래스는 상속을 받지 않았으므로 간접적으로 Objects 클래스를 상속받게 된다. Object 클래스를 상속받는 목적 그렇다면 Object 클래스를 상속받는 이유는 뭘까? 이는 자바의 모든 인스턴스에 공통된 기준 및 규약을 적용하기 위함이다. 우리가 사용하는 System.out.println 메소드의 매개변수 자료형을 보면 알 수 있다. "public void println(..
Java- 상속 extends 자바에서 상속을 하는 경우 extends 키워드를 통해서 상속을 한다. 생성자 실행순서 상속받은 서브클래스의 인스턴스가 생성이 된다면 부모클래스의 생성자가 먼저 실행된 후 서브클래스의 생성자가 실행된다. super 키워드 super를 통해서 상위클래스의 생성자를 명시적으로 호출할 수 있다. 여기서 중요한 것은 상위클래스의 범위가 바로 직전까지로 한정된다는 것이다. 예를 들어 총 10개의 상위클래스가 있는 클래스 A가 있다고 하면 super로는 총 9번의 상속을 받은 바로 위의 클래스의 생성자만 실행이 가능하다는 것이다. 상위 클래스에 여러개의 생성자가 존재하는 경우 기본생성자를 호출하기 위해선 굳이 super키워드를 사용하지 않고 생략해도 되지만, 특정 매개변수 생성자를 호출하기 위해선 s..
Java- 배열 배열의 생성 //둘다 가능 int[] arr1 = new int[5]; int arr2[] = new int[5]; 배열을 생성하는 방법은 위와 같다. 중괄호 위치는 둘다 가능하다. 배열은 여러개의 인스턴스를 생성하지 않는다 int iArr[] = new int[10]; //10개의 int형 데이터를 담을 수 있는 참조변수 10개 생성 String[] sArr = new String[5]; //5개의 String형 인스턴스를 담을 수 있는 참조변수 5개 생성 IMadeClass cArr[] = new IMadeClass[20]; //20개의 IMadeClass 인스턴스를 담을 수 있는 참조변수 20개 생성 배열 그 자체로는 배열 인스턴스가 맞지만, arr[1], arr[2] .. 처럼 각각의 공간이 인스..
Java- 콘솔 입출력 콘솔 출력 System.out.println( )의 이해 public class toStringPractice { public static void main(String[] args) { StringBuilder stb = new StringBuilder("123"); System.out.println(stb.toString()); System.out.println(stb); //위와 동일한 결과 stb.append(4567); System.out.println(stb.toString()); System.out.println(stb); } } 123 123 1234567 1234567 일반적인 문자열 출력 메소드인 System.out.println( )은 문자열을 출력하는 메소드인데, System.out..
Java- 문자열 결합의 최적화(StringBuilder 클래스) String에서의 '+' 연산의 해석 String s1 = "닭고기" + 'a' + 123 + 77.1 //s1 = "닭고기a12377.1" 문자열을 '+'연산자로 연결을 하게된다면 뒤에 연결되는 자료형에 관계없이 그냥 뒤에 갖다 붙이는 식으로 연결이된다. 단순히 뒤에 붙이는 구조인데 컴파일러는 이를 다음과 같이 해석한다고 추정해볼 수 있다.. String s1 = "닭고기".concat(String.valueOf('a')).concat(String.valueOf(123)).concat(String.valueOf(77.1)) 참고로 concat( ) 함수는 문자열 뒤에 문자열을 붙이는 함수이고, String.valueOf( ) 함수는 타 자료형을 문자열로 바꿔주는(다시말해 타 자료형과 똑같이 생긴 Str..
Java- 메소드 오버로딩과 this 오버로딩 조건 -매개변수 개수 void simpleFunc(int i)와 void simpleFunc(int i1, int i2)는 오버로딩된다. -매개변수 타입 void simpleFunc(int i)와 void simpleFunc(String s)는 오버로딩된다. -반환형은 오버로딩 조건이 아님 void simpleFunc(int i)와 int simpleFunc(int i)는 오버로딩 불가하다. this를 통한 생성자 오버로딩 class Person{ private int regiNum; private int passNum; Person(int rNum, int pNum){ regiNum = rNum; passNum = pNum; } Person(int rNum){ //생성자 오버로딩 this(rN..
Java- main 메소드 main 메소드 main의 위치 자바를 보면 모든 메소드들이 기본적으로 클래스 내부에 선언되고 있음을 볼 수 있다. 그렇기에 메소드인 main도 특정한 클래스 내부에 선언이 되어야 함을 이해할 수 있는데, 이때 "main이 선언되는 클래스의 위치는 중요하지 않다". 즉, 다시말해 어느 클래스에든 선언이 가능하다는 것이다. 그 이유는 main이 static 선언이 되었기 때문이다. static 선언(클래스 메소드)는 인스턴스 안에 속해 있지 않다는 특성 때문에 사실상 해당 클래스와는 별개로 볼 수 있기 때문이다. 그럼에도 불구하고 main을 위한 특정 클래스를 따로 정의하는 것이 일반적이다.
Java- 클래스 변수와 클래스 메소드, static 클래스 변수와 인스턴스 변수 클래스를 선언하면 내부에 수많은 인스턴스 변수(일반적인 클래스 멤버 변수)를 선언하게 된다. 그리고 클래스 변수란 static 선언된 변수를 의미한다. 일반적인 변수들과는 달리 클래스 변수는 하나의 메모리 공간에 존재하면서 단지 클래스의 인스턴스들이 해당 변수에 접근할 권한이 존재하는 것뿐이다. 따라서 클래스 변수는 모든 인스턴스들이 동시에 공유하는 변수라고 생각하면 편하다. 클래스 변수란... -인스턴스 생성 이전부터 접근이 가능하다. -어느 인스턴스에도 속하지 않는다. 클래스 변수에 접근하기 클래스 내부에서 접근 -클래스 변수 이름 클래스 외부에서 접근 -인스턴스 이름.클래스 변수 이름 class AccessWay{ //클래스 내부 static int num = 0; Ac..