목록Java/자바 기본 문법 (68)
가자미의 개발이야기
a. 포함관계 class Circle{ int x; int y; int r; } class Point{ int x; int y; } 다음과 같은 클래스들을 Point를 재사용한 포함관계로 표현하면 class Circle{ Point c = new Point(); int r; } class Point{ int x; int y; } 이렇게 코드를 재사용할 수 있다. b. 상속 관계 상속은 어떤 클래스의 모든 특성(변수와 메소드)를 다른 클래스에 그대로 전해주는 것을 의미한다. 상속은 코드 재사용이 아닌 클래스 간의 공통된 규칙을 정의할 때 사용된다. 자바는 c++과는 다르게 복수 상속을 허용하지 않는다. c. 상속이냐 포함이냐 그렇다면 옳은 상속의 기준은 무엇일까? 클래스들을 말로 풀어봤을 때 어떤 쪽에 해..
a. 배열 int[] ref=new int[5]; int[] ref={1,2,3,4,5}; int[] ref=new int[]{1,2,3,4,5}; int ref; ref=new int[5]; int ref; ref=new int[]{1,2,3,4,5}; 이를 통해 자바에서 배열도 인스턴스로 생성됨을 알 수 있다. 클래스도 배열을 만들 수 있다! 배열은 다른 메소드의 매개변수로 참조가 가능하고 메소드의 반환값으로 배열이 참조를 받을 수 있다. 자바 배열의 초기화 메소드 Arrays클래스의 static메소드인 fill(int[] a, int val) 두번째 인자로 전달된 값으로 배열 초기화 Arrays클래스의 static메소드인 fill(int[] a, int 어디부터, int 여기까지, int val) ..
printf 메소드 : 문자열을 서식지정자(%d, %f %c등...)로 표현하는 메소드 Scanner 클래스 : 순서대로 데이터를 읽어드리는 메소드 띄어쓰기로 구분해서 읽어냄(?) Scanner 인스턴스 생성은 데이터를 뽑아 올 대상과의 연결을 의미!!! Scanner sc=new Scanner(source); 그렇다면 키보드로부터 데이터를 입력받으려면? Scanner sc = new Scanner(System.in); sc.nextInt() 메소드는 다음 정수값을 가져오란 뜻!! 자료형에 따라 nextInt, nextByte, nextLine...
a. String 클래스의 특징 자바에서는 String str1="java"; 도 유심히 살펴볼 이유가 있다. str1이라는 String 인스턴스가 생성되어 "java"라는 데이터를 인스턴스로 전달해준 셈이다. 즉 String str1=new String("java"); 이런 의미인 셈이다. 이때 하나 기억해야 할 것이 자바 String 인스턴스는 immutable 인스턴스 라는 사실이다. (immutable은 값이 변경할 수 없는 상태를 말한다.) 따라서 String 인스턴스 생성을 최소한으로 한다.(오류가 일어날 확률이 없기 때문) String 클래스는 다른 기본 자료형과 +연산이 가능하다. 다른 기본자료형을 String 클래스로 바꾸고 서로 이어붙여서 반환한다. 다르게 생각하면 어떤 자료형을 Str..
자바가 메소드를 참조할 때는 두가지를 고려한다. 첫째 메소드의 이름 둘째 매소드의 매개변수 정보 이다. 달리 생각하면 자바는 메소드 이름이 다르거나 혹은 같은 이름의 메소드라도 매개변수 정보가 다르면 서로 다른 메소드로 정의하게 되는 셈이다. 이런 이름이 같아도 매개변수가 달라 여러개를 정의하는 방식을 메소드 오버로딩이라고 한다. 이때 반환형은 상관없다는걸 알아두자! 특히 모호한 오버로딩은 피하자! 예를 들어 메소드명(int a, double b); 메소드명(int a, int b); 가 정의되었을 때 메소드명(3, 'k');는 어떻게 될까? 앞선 두 메소드명 모두 가능한 모호한 오버로딩이다.(물론 이 경우에선 형변환에 의해 두번째 메소드가 실행된다.) 그리고 이런 오버로딩은 메소드만 해당하는게 아니라 ..
보호되어 있는 글입니다.
a. 클래스 변수(스태틱 변수) 모든 클래스에서 공유하기 위해 클래스에 속하지 않는 독립적인 변수라고 생각하면 편한다. 하지마 자바로 코딩할 때 그런 독립적인 변수도 클래스 안에 써줘야 하니, 이를 구분하기 위해 앞에 static이라고 붙이는 것이다. 즉 static 변수는 자신이 몸담고 있는 클래스와 관련 없는 독립적인 존재이다. 하지만 한가지 지켜줘야 하는 것이 있는데, 자신이 몸담고 있는 클래스가 지정한 접근 수준의 접근을 허용한다는 점이다. 즉 인스턴스의 이름으로 외부에서 접근 가능한 경우도 생기게 된다. 따라서 static변수에 접근할 때는 인스턴스의 이름으로 접근하기보다 클래스의 이름으로 접근해주는게 좋다.(인스턴스와 구분하기 위해) b. 스태틱 메소드 전체적인 특징은 앞서 설명한 클래스 변수..
캡슐화란 쉽게 말하면 한 클래스에 그 클래스와 관련된 것을 적절하게 담는 행위를 말한다. 프로그램의 요구조건에 따라서 캡슐화의 기준은 달라질 수 있고, 완벽한 정답이란건 없다.
a. 정보 은닉 자바의 정보은닉은 외부에서 클래스에 있는 데이터를 다루려 할 때, 데이터 자체에 접근하지 말고, 기능으로 데이터를 활용할 수 있도록, 즉 간접적으로 영향을 미치도록 하는 기능이다. 정보 은닉을 위해서는 인스턴스 변수 앞에 private라는 접근 수준 지시자를 붙여주면 된다. private를 붙인 변수는 외부에서 직접 접근이 불가능해진다. 다만 메소드의 매개변수를 통한 접근은 가능해진다. 예를 들어 인스턴스명.변수=~~;로 변경은 불가능하지만 class메소드(~~)로는 변경 가능하다. b. 접근지시자 접근 자유도 순으로 public / protected / default(지시자를 선언하지 않은 경우 포함) / private 이 네가지 지시자를 쉽게 분류할 수 있는 방법은 private 기준..
이름이 같은 클래스를 사용해야 하는 상황이 발생한다고 상상해보자. 이름이 같은 클래스가 디렉토리에 존재할 수 없으니, 서로 이름이 다르게 하거나, 서로 위치를 달리해야 할 것이다. 이를 위해 사용되는게 자바의 패키지 개념이다. 패키지의 이름이 중복되지 않도록 하는 몇가지 규칙이 있다. 먼저 패키지 이름은 모두 소문자로 작성해야 한다. 인터넷 도메인 이름의 역순으로 이름을 구성해야 한다.(예를 들어 naver에서 가져온 클래스일 경우 com.naver;이런 식) 이름 끝에 클래스를 정의한 주체 또는 팀의 이름을 추가해야 한다.(예를 들면 철수가 정의한 패키지는 com.naver.chulsoo;)로 정의할 수 있다. 이렇게 생성된 패키지는 클래스패스-com디렉토리-naver디렉토리-chulsoo디렉토리-클래..