개발자의 길
-
2-5) 글로 적는 웹개발 공부 - 자바(Java)2019.09.12
-
2-4) 글로 적는 웹개발 공부 - 자바(Java)2019.09.11
2-5) 글로 적는 웹개발 공부 - 자바(Java)
■ 은닉화(-캡슐화)
- 멤버필드를 접근제한자 private 으로 선언하여 외부에서 접근불가
*private 으로 선언하면 자기 클래스에서만 접근이 가능한다.
- 세터(Setter)와 게터(Getter) 로 접근
- 외부에서 접근가능한 기능을 최소화 캡슐화
■ VO(Value Object) = DTO(Data Transfer Object) 라고도 함
- 멤버필드를 private 으로 선언
- Setter 와 Getter
- 기본생성자
■ 생성자
접근제한자 클래스명(인자..) {
멤버필드 초기화 구문작성 등...
}
- 멤버필드의 초기화
- 생성자를 프로그래머가 만들지 않으면 기본생성자를 컴파일러(Compiler)가 자동으로 생성합니다.
■ 자바의 숨겨진 비밀(코딩의 편리함을 위해 생략가능)
- import.java.lang.* 은 생략이 가능하다.
- 생성자 개발자가 단 한개의 생성자라도 선언하지 않으면 컴파일러가 컴파일시에 기본생성자 한개를 만들어서 사용
- this. 같은 클래스 내부에서 인스턴스 멤버끼리 접근 할 때는 this. 생략 가능
- 클래스명. 같은 클래스 내부에서 static 끼리 접근 할 때는 클래스. 생략이 가능
■ public void test(int a, boolean b){...}
- 메서드명 test()
- 접근제한자 public
- 리턴 자료형 void(리턴값 없음)
- 인자 2개 int형과 boolean형
=> 접근제한자가 public 이고 static과 리턴값이 없고 int형과 boolean형 인자가 2개인 test 인스턴스 메서드 입니다.
■ 다음과 같은 클래스를 java 클래스로 선언해보세요.( VO) 로
TV |
제조사 모델명 가격 |
public class Tv(){
//1) 멤버필드를 private 선언
private String company; //제조사
private String model; //모델명
private int price; //가격
//2)기본생성자
public Tv(){}
//3)setter 와 getter 설정
public void setCompany(String company){
this.company = company;
}
public getCompany(){
return company;
}
public void setModel(String model){
this.model = model;
}
public getModel(){
return model;
}
public void setPrice(int price){
this.price = price;
]
public getPrice(){
return price;
}
}
■ 아래의 소스코드에서 왜 컴파일 에러가 나는지 설명해 보세요.
public class Homework2{
private int a;
private boolean b;
public static void main(Stringp[] args){
Homework2 h = new Homework2();
Homework2 h2 = new Homework2(3, false);
}
}
(1) 기본생성자 호출은 프로그래머가 생성하지 않아도 컴파일시 컴파일러가 자동으로 생성해주기에 h 는 에러가 나지 않는다.
(2) 인자 2개를 가지고 있는 h2 는 직접 인자 2개 짜리 생성자를 만들어주지 않으면 에러가 난다.
■ 멤버필드를 정보은닉하기 위해 접근제한자를 privatte 로 선언하고, 멤버필드에 데이터를 세팅하기 위해 set메서드를, 데이터를 얻기 위해 get 메서드를 이용합니다.
■ 다음의 결과를 쓰세요.
public class ConTest{
Contest(){
this(3);
}
void ConTest(int a){
System.out.println("A");
}
ConTest(char c){
this("");
System.out.println("B");
}
private ConTest(int a){
this('a');
System.out.println("C");
}
private ConTest(String str){
System.out.println("D");
}
public static void main(String[] args){
ConTest con1 = new Contest("ConTest");
ConTest con2 = new ConTest();
}
}
public class ConTest{
//ConTest 클래스안에는 멤버필드는 없다.
Contest(){
this(3);
}//접근제한자, 인자가 없는 기본 생성자
void ConTest(int a){
System.out.println("A");
}//void 라는 void 라는 리턴자료형이 있으니 메서드이다.
ConTest(char c){
this("");
System.out.println("B");
}//char형 인자 1개를 가지고 있는 생성자
private ConTest(int a){
this('a');
System.out.println("C");
}//int형 인자 1개를 가지고 있는 생성자
private ConTest(String str){
System.out.println("D");
}//접근제한자가 private 이고 String 형 인자 1개를 가지고 있는 생성자
public static void main(String[] args){
ConTest con1 = new Contest("ConTest");
ConTest con2 = new ConTest();
}//멤버 main 메서드
//해보자
}
- 메서드 오버로딩이란 메서드 이름이 같고, 인자가 다른 것 입니다.
- 인자가 다르다는 것은 다음과 같다.
- 자료형이 다르거나
- 이름이 다르거나
- 순서가 다르다는 것
■ 다음 소스는 왜 컴파일 에러가 나지 않을까요?(기본생성자 관련하여)
public class Homework(){
void Homework(){}
private Homework(){}
}
Homework 클래스 안에 Homework() 같은 이름이지만 void Homework() 는 리턴자료형인 void(리턴값이 없음) 이기 때문에 메서드, private Homework()는 접근제한자 private 를 가지고 리턴자료형이 없고 인자가 없는 기본 생성자이기 때문에 에러가 나지 않는다.
■ 해당 프로그램의 결과를 쓰세요.
public class Homework(){
int a; //멤버필드
private int test(int a){
return a++; //*후위증가연산자는 return 하고 증가됩니다.
}//int형 인자를 1개 가지고 있는 test 생성자
private int test2(Homework h){
return h.a++
}//객체자료형 homework 인자를 1개 가지고 있는 test2 생성자
public static void main(String[] args){
Homework h = new Homework();
h.a = 5;
int a = 4;
h.test(a);
a = h.test2(h);
System.out.println(h.a);
System.out.println(a);
}
}
결과:
■ 다음 프로그램의 실행 결과는 무엇일까요?
public class Homework2 {
private String str;
public Homework() {
this("Chupa_Chups!");
System.out.println("★");
}
private Homework2(String str){
this.str = str;
System.out.println("●");
}
private void test(String str){
str = "Hello World!";
}
public static void main(String[] args){
Homework2 ho = new Homework2();
ho.test(ho.str);
String str = ho.str.substring(2,5);
System.out.println(str);
System.out.println(ho.str);
}
}
결과:
'개발자의 길 > 글로 적는 웹개발' 카테고리의 다른 글
3) 글로 적는 웹개발 공부 - 오라클디비(OracleDB) (0) | 2019.09.14 |
---|---|
2-6) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.13 |
2-4) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.11 |
2-3) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.10 |
2-2) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.08 |
2-4) 글로 적는 웹개발 공부 - 자바(Java)
class A{
static a;
int b;
}
class B{
static int a;
boolean b;
}
public class C{
public static void main(String[] args){
A a = new A();
B b = new B();
a.a = 10;
a = new A();
b.a = a.a;
b.b = true;
}
}
- 말로 설명하는 의미 해석
static int a;
=>접근제한자가 default 이고 기본자료형이 int 인 static 멤버필드 a 입니다.
public static void main(String[] args){}
=> 접근제한자가 public 이고 return 값이 없고 인자는 String형 배열 args 인자를 가지고 있는 static
메서드 main 입니다.
A a = new A();
=> 객체자료형 클래스 A에 레퍼런스를 저장할 수 있는 지역변수 a를 선언하고 new 라는 키워드를 통해 heap
메모리 안에 공간을 할당받아 클래스 A 생성자를 호출해 객체를 생성합니다.
- 접근제한자
- public
- protected
- default
- private
- 멤버필드의 선언
=> 접근제한자 static 자료형 변수명
- 메서드의 선언
=> 접근제한자 static 리턴자료형 메서드명(인자...){
리턴 키워드
}
- 멤버의 종류에는 인스턴스(Instance)와 스태틱(Static)이 있다.
- 인스턴스의 호출방법은 객체명.(같은 멤버면 this. 생략가능) 으로 접근한다.
- 스태틱의 호출방법은 클래스명.(같은 멤버면 클래스명. 생략가능) 으로 접근한다.
'개발자의 길 > 글로 적는 웹개발' 카테고리의 다른 글
2-6) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.13 |
---|---|
2-5) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.12 |
2-3) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.10 |
2-2) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.08 |
2) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.08 |